php password_hash 和 password_verify 问题不匹配

标签 php passwords php-password-hash

我正在尝试 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/

相关文章:

php - 防止 AJAX Post 成功后重定向

sql - 在 sql server 2005 中加密密码的方法

forms - CI - 忘记密码表单验证以检查数据库中是否存在电子邮件地址

php - PHP 5.5 的新 password_hash 函数中随机生成的密码 salt 有什么用?

php - 在 PHP 5.5 中生成密码哈希并设置成本选项

PHP - 检查数组中的重复项并更新循环中的重复值

php - ffmpeg shell 输出到 php 头文件?

php - 如何使用PHP的password_hash来哈希和验证密码

php - PHP 中类似 Javascript 的对象?

security - 在 puppet 特工日志中隐藏 secret ?