php password_hash 和 password_verify 问题不匹配

2022-08-30 21:26:49

我正在尝试PHP 5.5中一个名为password_hash()的新函数。

无论我做什么,$hash和$password都不会匹配。

$password = "test";

$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";



if (password_verify($password, $hash)) {
    echo "Success";
}
else {
    echo "Error";
}

答案 1

代码的问题在于,在处理哈希时,您使用的是双引号而不是单引号。"'

分配时:

$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";

它让php认为你有一个调用的变量,另一个调用的变量,最后是第三个调用。显然事实并非如此。$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e

我注意到在打开错误报告时,错误:

注意: 未定义变量: fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e

被 PHP 抛出。

将所有双引号替换为单引号以进行修复。

例如

$hash = '$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e';

将整个哈希视为文本字符串,而不是具有嵌入式变量的字符串。


答案 2

我有一个类似的问题。password_verify()

在我的情况下,错误是我已经在数据库中声明了我的密码字段为,但哈希等于或更长到60个字符。varchar(30)


推荐