app.config文件是否是存储密码的安全位置?

tec*_*hno 10 .net c# passwords app-config winforms

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

还有其他方法可以安全地实现这一目标吗?

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

Ram*_*esh 10

您可以使用DPAPI(数据保护API)来加密配置文件的某些部分.您的代码仍将使用ConfigurationManager,并且框架将对解密进行解密.有关相同的更多信息,请参阅此模式和实践文档如何:使用DPAPI加密ASP.NET 2.0中的配置节

更新

要加密或解密代码中的信息,可以使用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);
    }
}      
Run Code Online (Sandbox Code Playgroud)

  • @techno您应该运行自定义安装程序操作,这将在安装时或用户第一次输入详细信息时执行此操作.用示例代码更新了我的答案. (2认同)