2个相等的byte []不返回true

Jov*_*ova 7 c# passwords byte

我正在尝试在登录时验证某人的密码.

我取输入的密码并检索用户保存的哈希密码和密码盐.

然后我用保存的盐哈希输入的密码,看它是否等于保存的密码.

但是,即使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;
    }
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 13

您应该比较数组的每个字节,您可以进行简单的循环,或使用SequenceEqualLinq Extension方法(如果可用):

public static bool VerifyPassword(byte[] newPassword, byte[] storedPassword,
                                  byte[] storedSalt)
{
    byte[] password = CreateHashedPassword(newPassword, storedSalt);

    return password.SequenceEqual(storedPassword);
}
Run Code Online (Sandbox Code Playgroud)


log*_*cnp 3

Equals 不会对两个 byte[] 数组进行字节比较。您必须自己比较两个数组中的每个字节。