当我从MySQL使用PDO
检索bcrypt哈希时$password_hash = $result_set_database['hash_value'];
并使用它来验证
if(password_verify($password, $password_hash))
{ echo "valid";}
else
{echo "invalid";}
我总是因为响应而变得无效,但我已经尝试过像这样手动编码哈希,
$password_hash = '$2y$12$rSMqbIqhOga5Qnbv9dCfoeE4HRqJKyJqSRk8c8bUl9w.cVkXVfsdW'// string is "password"
现在这适用于password_verify,但不会存储在数据库中的相同哈希值,
我的数据库密码哈希列的大小为255 varchar
为什么会这样?
答案 0 :(得分:0)
我做了一个快速测试:
$password = 'password';
$hash = password_hash($password, PASSWORD_DEFAULT);
$dbHash = '$2y$12$rSMqbIqhOga5Qnbv9dCfoeE4HRqJKyJqSRk8c8bUl9w.cVkXVfsdW';
$result = password_verify($password, $hash);
$dbResult = password_verify($password, $dbHash);
var_dump($result);
var_dump($dbResult);
在这两种情况下,我们都会得到true
:
boolean true
boolean true
答案 1 :(得分:0)
strlen($password_hash)
给了61,一个空格被添加到哈希,我怀疑与PDO
有关,在检查之前使用trim($password_hash)
解决了问题