2014-01-16 85 views
0

正在關注How do you use bcrypt for hashing passwords in PHP?你如何驗證用戶提交的密碼對bcrypt哈希?

使用密碼提交到MySQL:

$options = array('cost' => 11); 
    $password = password_hash("$_POST[password]", PASSWORD_BCRYPT, $options); 

密碼在MySQL中顯示爲:

mysql> SELECT password FROM users; 
+-----------------------------------------------+ 
| password          | 
+-----------------------------------------------+ 
| $2y$11$O77omA4vaNKu0DScTXCBd.FSXKSV0PD0piEokV | 
+-----------------------------------------------+ 

在登錄方面:

$hash = $row['password']; 
$password = $_POST[password]; 

if (password_verify($password, $hash)) { 
echo 'Password is valid!'; 
} else { 
echo 'Invalid password.'; 
} 

登錄不工作,總是顯示:

密碼無效。

由於文件相當大,我粘貼了相關部分。如果需要更多(可能不相關),我可以粘貼。

+0

@jszobody有。 – user2656114

+0

你的代碼還有別的東西在你的代碼中。你發佈的代碼工作得很好:http://3v4l.org/lmK9f – jszobody

+0

@jszobody事實上,MySQL專欄的時間不夠長*面對手掌*。這是在45以前,我已經修改爲60.是否有一些「建議」的長度或什麼來防止未來的問題? – user2656114

回答

2

我想這是因爲列的長度......使用這種設置,生成的密碼將有60個字符,則返回一個有少,你可以展示你的表結構?

PHP文件說

...因此,建議將結果存儲在數據庫中的列,可以擴展超過60個字符(255個字符將是一個不錯的選擇)...

看到:http://www.php.net/manual/pt_BR/function.password-hash.php

-1
if(crypt($user_password, $databse_password)==$databse_password) 
    { validate login} 
else 
    {reject login} 
+0

爲什麼-1?我實際上使用它。 – datelligence

+0

你應該添加一些文字;-) –