password_hash和password_verify:使用硬编码哈希总是评估为false

Sir*_*obi 0 php password-hash

我已阅读此主题的其他帖子,但尚未找到解决此问题的方法.这是我的代码,简化为裸功能:

<?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手册的以下注释比我更好地解释了它: