You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用硬编码哈希时password_hash与password_verify验证始终返回false求助

解决PHP password_verify硬编码哈希验证失败的问题

嘿,我猜你碰到的问题是用硬编码的$hashB调用password_verify()时返回false,对吧?这其实是个挺常见的小坑,我来给你捋清楚原因和解决办法:

问题根源

你定义$hashB的时候用了双引号",PHP在处理双引号包裹的字符串时,会自动解析里面的$符号,把它当成变量名来处理。你看你的哈希值里有一堆$,比如$2y$10$...,PHP会尝试把$2y、$10这些当作变量,但这些变量根本没定义,结果就是哈希字符串被破坏,变成了错误的内容,自然验证通不过。

解决办法

有两种简单的修复方式,推荐第一种:

  • 改用单引号包裹哈希字符串:单引号里的内容会被PHP当作纯文本,不会解析任何变量,能完整保留哈希值的原始内容。
  • 如果一定要用双引号,就把每个$都转义成\$,不过这种方式写起来麻烦,不如单引号省心。

修改后的测试代码

<?php
$password = "YS7Wde5s";
$hashA = password_hash($password, PASSWORD_BCRYPT);
echo $hashA . "<br>";

// 用单引号包裹,避免PHP解析$符号
$hashB = '$2y$10$nltCAZhbMD2OILgq2ftWNOd6kJL8oidQ12CLEM5Gi1kIj5GxKtNhm';

// 验证hashA
if (password_verify($password, $hashA)) {
    echo "yes (hashA验证通过) <br>";
} else {
    echo "no (hashA验证失败) <br>";
}

// 验证hashB
if (password_verify($password, $hashB)) {
    echo "yes (hashB验证通过)";
} else {
    echo "no (hashB验证失败)";
}
?>

运行这段修改后的代码,你会发现hashB也能正常验证通过了。

内容的提问来源于stack exchange,提问作者Sir Tobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:26:36