首页  >  文章  >  后端开发  >  为什么Password_Verify()函数不验证哈希密码?

为什么Password_Verify()函数不验证哈希密码?

Patricia Arquette
Patricia Arquette原创
2024-10-21 07:07:30914浏览

Why is the Password_Verify() Function Not Verifying Hashed Passwords?

PHP的password_hash()、password_verify()

在你的注册脚本中,你使用PHP的password_hash()函数来加密用户密码并将其存储在数据库中。当用户尝试登录时,您将使用password_verify() 将输入的密码与数据库中的哈希版本进行比较。但是,密码不匹配,表明您的 password_verify() 调用存在问题。

password_verify() 用法

password_verify() 采用两个参数:

  • $password:用户登录时输入的明文密码。
  • $hash:存储在数据库中的哈希密码。

它将纯文本密码与散列版本进行比较,如果匹配则返回 true,如果不匹配则返回 false。

您的代码问题

在您的登录脚本中,您将纯文本密码 ($pwd) 和散列密码 ($password) 传递给password_verify():

if(($user_id == $p_num) && (password_verify($pwd, $password))){

但是,您还使用 var_dump() 在比较,这可以改变它们的值。 var_dump() 输出显示纯文本密码 ($pwd) 被修改为“1”,而散列密码 ($password) 保持与数据库中存储的相同。

正确用法

要解决此问题,请从代码中删除 var_dump() 调用,并确保 $pwd 包含用户在登录期间输入的纯文本密码。您的登录代码应如下所示:

if(($user_id == $p_num) && (password_verify($pwd, $password))){

以上是为什么Password_Verify()函数不验证哈希密码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn