比较哈希密码

Jon*_*asB 1 .net c#

我正在使用.net 3.5.这里的问题是我似乎无法获得匹配的密码.我曾尝试在两者上使用ComputeHash方法,但它会生成不同的哈希值.因为它们现在是阵列的大小不同.(显然它们基于相同的字符串).我做错了什么?("password"是用户输入的byte [] param)

object dataPassword = database.ExecuteScalar("GetUserPassword", new object[] {userName});
if(dataPassword != null && !(dataPassword is DBNull))
{
    SHA1Managed hashProvider = new SHA1Managed();
    byte[] hashedPassword = (byte[])dataPassword;                    
    byte[] hash = hashProvider.ComputeHash(password);
    result = hashedPassword.Equals(hash);

}
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 14

你不能比较byte[]那样.它只是比较参考.您应该使用循环或使用IEnumerable<T>.SequenceEqual扩展方法:

result = hashedPassword.SequenceEqual(hash);
Run Code Online (Sandbox Code Playgroud)

旧方式(LINQ前):

static bool ArrayEquals<T>(T[] first, T[] second) {
    if (first == null && second == null) return true;
    if (first == null || second == null) return false;
    if (first.Length != second.Length) return false;
    for (int i = 0; i < first.Length; ++i)
       if (first[i] != second[i]) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)