php password_hash和password_verify不匹配

Dan*_*iel 10 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";
}
Run Code Online (Sandbox Code Playgroud)

ini*_*mfs 41

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

分配时:

$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
Run Code Online (Sandbox Code Playgroud)

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

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

注意:未定义的变量:fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e

被PHP抛出.

用单引号替换所有双引号以修复.

例如

$hash = '$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e';
Run Code Online (Sandbox Code Playgroud)

将整个哈希视为文字字符串而不是带有嵌入变量的字符串.

  • 嘿嘿......我喜欢这个...我知道了......男人......你救了我的头,我喜欢有时候事情会如此具有讽刺意味.非常感谢,并向我发鞠躬..我想到这一点...... :) (3认同)

小智 7

我有一个类似于password_verify()的问题..在我的情况下的错误,是我已经在数据库中将我的密码字段声明为varchar(30),但是散列等于或长于60个字符.

  • 我在某处读到,他们建议将数据库字段的长度设置为255个字符,以便将来进行校对. (3认同)
  • @docesam 我在某处读到密码的数据库字段应该是 TEXT 以便将来打样。 (2认同)

Sha*_*ran 6

对我来说很好用。

<?php

$hash=password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>
Run Code Online (Sandbox Code Playgroud)

输出:

密码有效!

  • 尝试保存密码,然后进行验证。你刚刚做的工作,但那不是可以使用的东西。它只是一个例子。密码需要存储在数据库中,然后进行验证。 (2认同)