我已阅读此主题的其他帖子,但尚未找到解决此问题的方法.这是我的代码,简化为裸功能:
<?php
$password = "YS7Wde5s";
$hashA = password_hash($password, PASSWORD_BCRYPT);
echo $hashA . "<br>";
// Copied from echo above
$hashB = "$2y$10$nltCAZhbMD2OILgq2ftWNOd6kJL8oidQ12CLEM5Gi1kIj5GxKtNhm";
if (password_verify($password, $hashA)) {
echo "yes";
} else {
echo "no";
}
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码适用$hashA于验证密码.但:
$hashA每当我重新加载页面时,echo 返回一个不同的哈希.$hashB,并使用它代替$hashA,我永远不会得到真正的password_verify呼叫.我错过了什么?是否存在我不知道的隐式类型转换?或者我应该如何工作?
小智 6
$ hashB周围的双引号导致$之后的哈希值内的所有内容被解释为变量.(https://secure.php.net/manual/en/language.types.string.php)
请改用单引号.
关于php手册的以下注释比我更好地解释了它: