php password_verify 无效
php password_verify doesn't work
这应该非常简单:我正在生成一个散列密码,然后想将它与 "unhashed" 字符串进行比较。它总是 returns 无效密码。我错过了什么?
<?php
// MY CURRENT PHP VERSION IS 7.0.9
$password = "abc";
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
if (password_verify($password, $password_hashed)) {
echo '<strong>correct password.</strong><br>';
} else {
echo '<strong>invalid password!</strong><br>';
}
?>
您的问题是您在散列字符串的末尾添加了换行符。
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
// ^
// Here you add a newline ------'
这意味着您对密码进行哈希处理,并在哈希字符串的末尾添加一个换行符。当您现在通过 password_verify()
与未散列的字符串进行比较时,它不会匹配 - 仅仅是因为该换行符。要解决此问题,您需要从散列密码的位置删除 ."\n"
,使其...
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options);
换行符可能来自 PHP 手册,其中显示了散列密码的示例。不幸的是,它具有误导性——我认为应该从示例中删除。
最后一点,来自手册。
Warning
The salt option has been deprecated as of PHP 7.0.0. It is now preferred to simply use the salt that is generated by default.
这应该非常简单:我正在生成一个散列密码,然后想将它与 "unhashed" 字符串进行比较。它总是 returns 无效密码。我错过了什么?
<?php
// MY CURRENT PHP VERSION IS 7.0.9
$password = "abc";
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
if (password_verify($password, $password_hashed)) {
echo '<strong>correct password.</strong><br>';
} else {
echo '<strong>invalid password!</strong><br>';
}
?>
您的问题是您在散列字符串的末尾添加了换行符。
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
// ^
// Here you add a newline ------'
这意味着您对密码进行哈希处理,并在哈希字符串的末尾添加一个换行符。当您现在通过 password_verify()
与未散列的字符串进行比较时,它不会匹配 - 仅仅是因为该换行符。要解决此问题,您需要从散列密码的位置删除 ."\n"
,使其...
$password_hashed = password_hash($password, PASSWORD_BCRYPT, $options);
换行符可能来自 PHP 手册,其中显示了散列密码的示例。不幸的是,它具有误导性——我认为应该从示例中删除。
最后一点,来自手册。
Warning
The salt option has been deprecated as of PHP 7.0.0. It is now preferred to simply use the salt that is generated by default.