我正在尝试 PHP 5.5 中的一个名为 password_hash() 的新函数。
无论我做什么,$hash 和 $password 都不匹配。
$password = "test";
$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
if (password_verify($password, $hash)) {
echo "Success";
}
else {
echo "Error";
}
最佳答案
您的代码的问题是您在处理散列时使用双引号 "
而不是单引号 '
。
分配时:
$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
它让 php 认为您有一个名为 $2y
的变量和另一个名为 $10
的变量,最后还有一个名为 $fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
的第三个变量。显然情况并非如此。
我在打开错误报告时注意到错误:
Notice: Undefined variable: fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
被 PHP 抛出。
将所有双引号替换为单引号以修复。
例如
$hash = '$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e';
将整个散列视为文字字符串,而不是带有嵌入变量的字符串。
关于php password_hash 和 password_verify 问题不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19855715/