【问题标题】:Simplest Method of Encrypting a String in .NET without MachineKey [duplicate]在没有 MachineKey 的情况下在 .NET 中加密字符串的最简单方法 [重复]
【发布时间】:2015-11-17 12:34:36
【问题描述】:

我目前正在加密字符串如下:

public static string Encrypt(this string DecryptedValue)
{
    if (string.IsNullOrWhiteSpace(DecryptedValue)) { return string.Empty; }
    return HttpServerUtility.UrlTokenEncode(MachineKey.Protect(Encoding.UTF8.GetBytes(DecryptedValue.Trim())));
}

public static string Decrypt(this string EncryptedValue)
{
    if (string.IsNullOrWhiteSpace(EncryptedValue)) { return string.Empty; }
    return Encoding.UTF8.GetString(MachineKey.Unprotect(HttpServerUtility.UrlTokenDecode(EncryptedValue)));
}

但是,当我将生产数据库移动到开发服务器(在部署之前测试新版本)时,这些函数无法解密已经存储在数据库中的数据(我假设这是因为我使用了机器密钥)。

有没有什么方法可以修改上述扩展,这样我就可以在多台机器上加密/解密同一个数据库而无需编写复杂的东西?

【问题讨论】:

  • 请定义“简单”。 ROT13 或 XOR 简单吗?也许,但不再安全......
  • 加密应该很困难,而且很慢。如果您将其用于密码,它也应该只是一种单向加密。你在加密和解密什么?
  • 我使用哈希作为密码(所以它们是单向的)——在这里,我正在加密/解密信用卡号——所以我必须能够读取原始字符串——

标签: c# asp.net encryption cryptography


【解决方案1】:

假设您正在谈论 asp.net,您可以尝试保留您的代码并更改 web.config 中的配置。

指定与生产服务器中相同的机器密钥和算法。

参考https://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.100).aspx

如果在 web.config 文件中指定了密钥,它应该覆盖您开发环境中的真机密钥,仅为您的应用程序。

【讨论】:

  • 如何生成decryptionKey和validationKey?
  • 没关系 - 我想通了 -
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 2017-02-28
  • 2011-05-18
  • 2017-10-08
  • 2015-06-02
  • 2015-05-26
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多