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

时间:2018-05-02 17:43:37

标签: 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";
}
?>

使用$hashA验证密码,上述代码效果很好。但是:

  • 每当我重新加载页面时,$hashA的回显都会返回不同的哈希值。
  • 如果我复制了回显的哈希值,请在$hashB中对其进行硬编码,然后使用此代码而不是$hashA,我就永远无法从password_verify调用中获得真实信息。

我错过了什么?是否存在我不知道的隐式类型转换?或者我应该如何运作呢?

1 个答案:

答案 0 :(得分:6)

$ hashB周围的双引号导致$后面的哈希值内的所有内容被解释为变量。 (https://secure.php.net/manual/en/language.types.string.php

请改用单引号。

关于php手册的以下注释比我更好地解释了它: