如何使用 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);
}

如何比较两个哈希值以验证密码?

如何使用 SHA256托管比较两个哈希

首先,您应该使用哈希值存储盐。

接下来,当用户尝试使用某些login password进行身份验证时,您可以使用下一个方案:

  1. 通过登录名从数据库中检索用户数据(例如,GetUser(login) )。用户类应包含登录名、散列密码和盐。
  2. 如果没有具有该登录名的用户,则身份验证失败。否则,使用上一步中检索的 User 类中的 password 和盐执行CalculateHash()
  3. 比较 2 个字符串:第一个是来自 User 类的哈希密码,第二个是来自 CalculateHash() 方法的哈希密码。如果哈希等于,则用户成功通过身份验证。

你存储了哈希和盐,对吧?

现在,当用户尝试登录时,您可以使用存储的盐再次运行方法,并且方法的输出应与数据库中存储的哈希匹配。