我已阅读此主题的其他帖子,但尚未找到解决此问题的方法。这是我的代码,简化为功能:
<?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
调用中获得真实信息。我错过了什么?是否存在我不知道的隐式类型转换?或者我应该如何运作呢?
答案 0 :(得分:6)
$ hashB周围的双引号导致$后面的哈希值内的所有内容被解释为变量。 (https://secure.php.net/manual/en/language.types.string.php)
请改用单引号。
关于php手册的以下注释比我更好地解释了它: