Php 如何根据bcrypt哈希验证用户提交的密码?

Php 如何根据bcrypt哈希验证用户提交的密码?,php,mysql,Php,Mysql,跟着 使用以下命令向MySQL提交密码: $options = array('cost' => 11); $password = password_hash("$_POST[password]", PASSWORD_BCRYPT, $options); MySQL中的密码显示为: mysql> SELECT password FROM users; +-----------------------------------------------+ | password

跟着

使用以下命令向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.';
}
登录不起作用,并且始终显示:

密码无效


我已经粘贴了相关部分,因为文件很大。如果需要更多(可能不相关),我可以粘贴。

我想这是因为列长度。。。使用此设置,生成的密码将有60个字符,返回的密码将更少,您可以显示您的表结构吗

if(crypt($user_password, $databse_password)==$databse_password)
   { validate login}
else 
   {reject login}
PHP文档说

。。。因此,建议将结果存储在可扩展到60个字符以上的数据库列中(最好选择255个字符)


请参见:

您的代码中还有其他地方在运行。您发布的代码运行良好:@jszobody确实,MySQL列的长度不够。从以前的45分开始,我已经修改为60分。是否有一些“建议的”长度或其他东西可以防止将来出现任何问题?来自PHP文档:请注意,随着新的更强大的算法被添加到PHP中,这个常量会随着时间的推移而改变。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在可扩展到60个字符以上的数据库列中(255个字符是一个不错的选择)?我实际上使用了它。你应该给它添加一些文本;-)