为什么 PHP 密码验证因密码哈希不匹配而失败?

Linda Hamilton
发布: 2024-10-21 07:04:02
原创
574 人浏览过

Why does PHP password verification fail with a password hash mismatch?

PHPpassword_hash()、password_verify()

在您的注册脚本中,您使用password_hash()正确地散列密码并将其存储在数据库。但是,在登录期间使用password_verify()验证密码时,您遇到不匹配的情况。

您提供的代码片段显示存储在数据库中的密码经过哈希处理(以“$2y$10$”开头) ,而用户输入的密码是纯文本形式(string(1) "1")。问题在于您从数据库检索密码的方式。

在登录脚本中,您直接从数据库结果中检索密码列,而不进行任何进一步处理。然而,存储的密码是经过哈希处理的,需要先对其进行未哈希处理,然后才能与用户使用password_verify()输入的纯文本密码进行比较。

解决方案:

在登录脚本中,在使用password_verify()之前,您需要从数据库中检索存储的散列密码,然后使用password_hash()函数和PASSWORD_DEFAULT算法对其进行反散列。以下是登录脚本的更正代码:

<code class="php">// ...same code as before...

$stored_hash = $row['password']; // Retrieve the stored hashed password
if (password_verify($pwd, $stored_hash)) {
    // ...same code as before...
}</code>
登录后复制

此修改可确保存储在数据库中的密码在与用户输入的纯文本密码进行比较之前正确地进行未哈希处理,从而允许 password_verify() 运行正确。

以上是为什么 PHP 密码验证因密码哈希不匹配而失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!