如何使用 SHA256托管比较两个哈希
本文关键字:两个 哈希 比较 何使用 SHA256 | 更新日期: 2023-09-27 18:33:32
我可以对用户输入的密码进行哈希处理,但我无法找到如何比较用户输入的密码的存储哈希和新哈希。
这是我的哈希代码:
public static string CalculateHash(string clearTextPassword, string salt)
{
//Convert the salted password to a byte array
byte[] saltedHashBytes = Encoding.UTF8.GetBytes(clearTextPassword + salt);
//Use hash algorithm to calulate hash
HashAlgorithm algorithm = new SHA256Managed();
byte[] hash = algorithm.ComputeHash(saltedHashBytes);
//Return the hash as a base64 encoded string to be compared and stored
return Convert.ToBase64String(hash);
}
如何比较两个哈希值以验证密码?
首先,您应该使用哈希值存储盐。
接下来,当用户尝试使用某些login
password
进行身份验证时,您可以使用下一个方案:
- 通过登录名从数据库中检索用户数据(例如,
GetUser(login)
)。用户类应包含登录名、散列密码和盐。 - 如果没有具有该登录名的用户,则身份验证失败。否则,使用上一步中检索的 User 类中的
password
和盐执行CalculateHash()
。 - 比较 2 个字符串:第一个是来自 User 类的哈希密码,第二个是来自
CalculateHash()
方法的哈希密码。如果哈希等于,则用户成功通过身份验证。
你存储了哈希和盐,对吧?
现在,当用户尝试登录时,您可以使用存储的盐再次运行方法,并且方法的输出应与数据库中存储的哈希匹配。