【问题标题】:DPAPI password encryption in C# and saving into database.Then Decrypting it using a keyC#中的DPAPI密码加密并保存到数据库中。然后使用密钥对其进行解密
【发布时间】:2016-03-15 15:15:45
【问题描述】:

我曾尝试使用 UTF8 算法和 SHA256 进行密码加密,但被建议不要使用它们。相反,我被建议使用 DPAPI。我从谷歌浏览了一些不清楚的示例代码。你能帮我处理一下 DPAPI 算法吗?

【问题讨论】:

    标签: c# encryption dpapi


    【解决方案1】:

    您可以使用 ProtectedData 类访问 DPAPI。 有两种加密方式:

    • CurrentUser:受保护的数据与当前用户相关联。只有在当前用户上下文下运行的线程才能取消对数据的保护。
    • Lo​​calMachine:受保护的数据与机器上下文相关联。计算机上运行的任何进程都可以取消保护数据。此枚举值通常用于特定于服务器的应用程序,这些应用程序在不允许不受信任的用户访问的服务器上运行。

    编码一个字符串并返回一个可以保存在数据库中的 Base64 字符串:

    public static string Protect(string stringToEncrypt, string optionalEntropy, DataProtectionScope scope)
    {
        return Convert.ToBase64String(
            ProtectedData.Protect(
                Encoding.UTF8.GetBytes(stringToEncrypt)
                , optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
                , scope));
    }
    

    解码一个 Base64 字符串(您之前保存在数据库中):

    public static string Unprotect(string encryptedString, string optionalEntropy, DataProtectionScope scope)
        {
            return Encoding.UTF8.GetString(
                ProtectedData.Unprotect(
                    Convert.FromBase64String(encryptedString)
                    , optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
                    , scope));
        }
    

    您需要记住,加密仅对机器有效(和用户,如果您选择CurrentUser 加密模式),因此需要在同一台服务器上执行加密/解密。

    如果您打算在负载平衡环境下使用 DPAPI see this article

    如果您需要更多信息,请告诉我。

    【讨论】:

      【解决方案2】:

      根据MSDN,DPAPI 是“使用用户或机器凭据来加密或解密数据”。我认为它使用 DES 或 AES 算法。

      但是对于密码,在保存到数据库之前,您应该始终使用带盐的单向哈希函数(MD5、SHA1...)。即使黑客可以访问您的服务器,他也永远无法解密用户的密码。

      所以,请坚持使用您的 SHA256 解决方案。记得在哈希之前加点盐。

      【讨论】:

      • 您不想使用 MD5 或 SHA-1,因为它们太快了,而且在现代硬件上很容易被暴力破解。您需要类似 bcrypt 或其他硬密码功能。此外,这个问题并不意味着用户可以控制密码验证,只是他们想要存储密码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多