我已经在我的 .NET Core 应用程序上编写了两个方法调用MakeHash
和CompareHash
。现在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] 删除。
我来说两句