2013-08-05 160 views
1

嗨,我想在PHP中使用password_hash()來散列我的密碼。這部分是好的,但比較哈希無論如何都返回false。要登錄我檢查用戶帳戶數據庫並獲取密碼哈希,然後把它比作在鍵入的密碼,我的代碼如下所示:PHP password_verify總是返回false

$password = $_SERVER["PHP_AUTH_PW"]; 
$hash = $row["password"]; 
if (password_verify($password, $hash)) { 
    // CREATE SESSION VARIABLES // 
} 
else{ 
    header("HTTP/1.1 404 Not Found"); 
} 

正如你可以看到,在中帶過來輸入的密碼HTTP標頭。我不認爲這會混淆密碼字符串,因爲我可以直接將其與數據庫中的密碼進行比較(不使用散列)。有任何想法嗎?我有三倍檢查我的PHP版本,我可以散列密碼,所以不是這樣。

+0

你是否檢查過你給'password_verify'的參數是你期望它們的? – Flosculus

+0

以及數據庫中的密碼已經用password_hash()函數進行散列處理。然後通過輸入的用戶名和輸入的公司ID識別並獲取。然後將輸入的密碼與使用password_verify()函數的散列密碼進行比較。但它總是返回錯誤 – Aaron

+0

不,我是說你手動檢查並確保'$ password'和'$ hash'的值是檢索的正確值,無論它們是否驗證。 – Flosculus

回答

2

因此password_verify()函數沒有錯。在password_hash()函數中增加了一些字符串。我從官方文檔複製並粘貼了這個函數:

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 

最後的「\ n」位沒有在驗證函數中被考慮。這只是因爲應對和粘貼,所以一旦我將它移除,就沒有問題。希望這有助於他人在未來。