我正在使用.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)