password_verify不使用数据库中的hash_string

时间:2014-05-29 08:41:54

标签: php

当我从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

为什么会这样?

2 个答案:

答案 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)解决了问题