我試圖登錄時,驗證別人的密碼。等於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