我试图登录时,验证别人的密码。等于2字节[]没有返回true
我把输入的口令和检索用户保存的哈希密码和密码盐。
然后我用已保存的盐对输入的密码进行哈希以查看它是否与保存的密码相同。
但是,即使byte [] storedPassword与byte [] enteredPassword完全相同,它在bool中也不会返回true,因此不会验证用户。这是为什么?
public static bool VerifyPassword(byte[] newPassword, byte[] storedPassword, byte[] storedSalt)
{
byte[] password = CreateHashedPassword(newPassword, storedSalt);
if (!password.Equals(storedPassword))
return false;
return true;
}
此代码之前,我会比较密码和storedPassword的长度。如果storedPassword小于密码,则可以读取数组的末尾。另一方面,如果密码较短,则仅比较前几个字节。如果您可以将密码设置为较短的尺寸,则可以使用存储的密码的前缀进行匹配。 Jacob – TheJacobTaylor 2010-02-26 06:05:34
一般来说,密码哈希算法总是产生相同数量的字节。例如,MD5散列总是16个字节,所以不需要检查散列的长度。 – Gabe 2010-02-26 06:10:03