我需要在代码中存储机密密码。我不能使用散列技术,因为需要密码本身。如何将这些数据安全地存储在 app.config 文件中?
还有其他方法可以安全地完成此任务吗?
DPAPI 和 ProtectData 类不是一个选项,因为密钥是系统特定的,例如:连接字符串不能以这种方式存储用于不同的最终用户系统。
我需要在代码中存储机密密码。我不能使用散列技术,因为需要密码本身。如何将这些数据安全地存储在 app.config 文件中?
还有其他方法可以安全地完成此任务吗?
DPAPI 和 ProtectData 类不是一个选项,因为密钥是系统特定的,例如:连接字符串不能以这种方式存储用于不同的最终用户系统。
您可以使用 DPAPI(数据保护 API)来加密配置文件的某些部分。您的代码仍将使用 ConfigurationManager,并且框架将负责解密。有关相同的更多信息,请参阅此模式和实践文档How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI
更新
要加密或解密代码中的信息,您可以使用ProtectedData.Protect和ProtectedData.Unprotect。这可以作为安装程序中自定义操作的一部分运行,或者在用户在使用您的应用程序时输入凭据时运行。
示例代码
class SecureStringManager
{
readonly Encoding _encoding = Encoding.Unicode;
public string Unprotect(string encryptedString)
{
byte[] protectedData = Convert.FromBase64String(encryptedString);
byte[] unprotectedData = ProtectedData.Unprotect(protectedData,
null, DataProtectionScope.CurrentUser);
return _encoding.GetString(unprotectedData);
}
public string Protect(string unprotectedString)
{
byte[] unprotectedData = _encoding.GetBytes(unprotectedString);
byte[] protectedData = ProtectedData.Protect(unprotectedData,
null, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(protectedData);
}
}