2016-12-28 79 views
0

password_verify的大問題。Password_verify未正確檢查

在我的數據庫有一欄:

password: $2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e ('b') 

當我想以檢查此密碼等於給我完全兩種不同的codes.My代碼字母A是:

$hash = password_hash('b', PASSWORD_DEFAULT); 
$pass = getPassword($email); 
echo $hash . ", " $pass; 

,這讓我:

$2y$10$oJbeQqGSee.pLcBNxqRzUecoCGc9fin7IF.evDVanN1pjmtIINSD2, 
$2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e 

爲何有不同?

回答

1

您應該插入您的存儲使用前password_hash(),然後當你確認你應該使用password_verify()

$pass = getPassword($email); 
$verify = password_verify('b', $pass); 

if ($verify) { 
    // passwords match 
} 
else { 
    // passwords do not match 
} 

參見:password-verify更多信息

2

這是因爲當不是由用戶指定,password_hash會隨機生成。 Salt是在散列之前附加到密碼的字符串。由於鹽是隨機的,兩個具有相同密碼的用戶在數據庫中仍然具有不同的哈希值。

的話題很好的總結,可以發現on the wikipedia

爲了驗證密碼正確,你不應該手動比較哈希值,這可能與各使用password_hash因爲隨機鹽的不同,但寧可使用功能password_verify