SHA1 哈希码比较失败

约翰·科格德尔

我已经在我的 .NET Core 应用程序上编写了两个方法调用MakeHashCompareHash现在MakeHash我能够成功转换 SHA1 代码,但问题是我尝试比较哈希代码的方式总是返回 false。这意味着该CompareHash方法无法比较普通代码和 SHA1 代码。你能告诉我如何修复CompareHash以便它能够在纯文本和 SHA1 哈希码之间进行比较吗?我在CompareHash方法上做错了什么?提前致谢

public static string MakeHash(string str)
{  
    // generate a 128-bit salt using a secure PRNG
    byte[] salt = new byte[128 / 8];
    using (var rng = RandomNumberGenerator.Create())
    {
        rng.GetBytes(salt);
    }
    // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
    string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
        password: str,
        salt: salt,
        prf: KeyDerivationPrf.HMACSHA1,
        iterationCount: 10000,
        numBytesRequested: 256 / 8));
    return hashed;
}

public static bool CompareHash(string plainString, string hashString)
{
    if (MakeHash(plainString)==hashString)
    {
        return true;
    }
    else
    {
        return false;
    }
}
利亚卡特

好吧,如果您需要一些快速解决方案而不在数据库中存储盐,那么您可以尝试使用下面的代码。这对我有用。但是强烈建议在它们之间使用盐和匹配。因为它是关于安全的,所以你应该小心并投入更多的精力。我的示例只是为您提供一个想法,而不是用于生产用途。

public static string MakeHash(string value)
        {
            return Convert.ToBase64String(
                System.Security.Cryptography.SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(value))
                );
        }


        public static bool CompareHash(string plainString, string hashString)
        {
            if (MakeHash(plainString) == hashString)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章