2012-11-28 51 views
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,如果這有什麼區別的話。

+0

你能重現該問題不通過數據庫回事?只需散列→直接檢查? – deceze

+0

@deceze - That works – dragonmantank

+0

您是2000%確定數據庫返回的值是相同的嗎? – deceze

回答

1

檢查在數據庫中的密碼的大小,如果它是< 50那麼它也許具有存儲完整的散列的問題,這就是爲什麼是假的百達