【问题标题】:Is app.config file a secure place to store passwords?app.config 文件是存储密码的安全地方吗?
【发布时间】:2012-04-22 16:38:43
【问题描述】:

我需要在代码中存储机密密码。我不能使用散列技术,因为需要密码本身。如何将这些数据安全地存储在 app.config 文件中?

还有其他方法可以安全地完成此任务吗?

DPAPI 和 ProtectData 类不是一个选项,因为密钥是系统特定的,例如:连接字符串不能以这种方式存储用于不同的最终用户系统。

【问题讨论】:

标签: c# .net winforms passwords app-config


【解决方案1】:

您可以使用 DPAPI(数据保护 API)来加密配置文件的某些部分。您的代码仍将使用 ConfigurationManager,并且框架将负责解密。有关相同的更多信息,请参阅此模式和实践文档How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

更新

要加密或解密代码中的信息,您可以使用 ProtectedData.ProtectProtectedData.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);
    }
}      

【讨论】:

  • 你错了,这种方法只对Web.config文件有用。由于DPAPI密钥是系统特定的,在不同最终用户的不同系统中无法实现正确解密
  • @techno 您应该运行自定义安装程序操作,这将在安装时或用户首次输入详细信息时执行。用示例代码更新了我的答案。
  • 这对于连接字符串是不可能的
  • @techno 你能详细说明为什么连接字符串不可能吗?您绝对可以将其作为安装程序自定义操作的一部分进行加密,前提是您正在使用它。
  • @techno 发送应用程序加密信息的另一种方法是使用硬编码的密钥对其进行加密。具有逆向工程知识的人可以轻松获得用于加密和解密信息的 Secret。因此,合乎逻辑的选择是使用集成身份验证。
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2017-03-23
  • 2012-05-23
  • 1970-01-01
相关资源
最近更新 更多