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)
将整个哈希视为文字字符串而不是带有嵌入变量的字符串.
小智 7
我有一个类似于password_verify()的问题..在我的情况下的错误,是我已经在数据库中将我的密码字段声明为varchar(30),但是散列等于或长于60个字符.
对我来说很好用。
<?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)
输出:
密码有效!