0
我正在嘗試將PHPass與新網站一起使用。我生成這樣的哈希值,並將其存儲在數據庫中:PHPass在檢查密碼時無法正常工作
$hasher = new \Hautelook\Phpass\PasswordHash(8, true);
$password = $hasher->HashPassword('secretpassword');
// I store $password in the DB for the user
在登錄頁面上,我得到了用戶和使用CheckPassword,看看他們是相同的:
function authUser($username, $password, $hasher, $db) {
$sql = "SELECT * FROM users WHERE username = :username";
$stmt = $db->prepare($sql);
$stmt->bindValue("username", $username);
$stmt->execute();
$user = $stmt->fetch();
$check = $hasher->CheckPassword($password, $user['password']);
if($check) {
return $user;
} else {
return null;
}
}
$user['password']
確實含有我存儲的正確哈希值,所以我知道這是正確的。 $password
是從表單傳入的純文本密碼。 CheckPassword()
總是返回false,但是從我今天上午閱讀的所有教程看來,這看起來是正確的,應該可以工作。 $hasher
的創建方式與8相同,成本和便攜設置爲true。
我不明白爲什麼CheckPassword總是返回false。我是否需要爲CheckPassword初始化散列器,而不是當我散列它時?我錯過了一些簡單的東西嗎
我在CentOS 6.3上運行PHP 5.3.19,如果這有什麼區別的話。
你能重現該問題不通過數據庫回事?只需散列→直接檢查? – deceze
@deceze - That works – dragonmantank
您是2000%確定數據庫返回的值是相同的嗎? – deceze