如何使用SHA256Managed比较两个哈希值?

时间:2016-02-07 20:53:41

标签: c# hash

我可以哈希用户输入的密码,但是我无法找到如何比较存储的哈希值和用户输入的密码的新哈希值。

这是我的哈希码:

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);
}

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

首先,您应该使用散列值存储salt。

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

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