2014-01-16 92 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

你应该添加一些文字;-) –