PHP:密码哈希

时间:2015-05-30 06:38:07

标签: php hash

我已经开始使用password_hash()进行密码散列。我遇到的问题是,当我使用password_verify()来检查输入值是否与存储在数据库中的哈希密码相匹配时,每次返回false时都是如此。

  $password = "test";

  $query = "SELECT password FROM user WHERE password = :pass ";
  $statement = $connection->prepare($query);
  $statement->bindParam(":pass", $password);
  $statement->execute(); 

   if(password_verify($password, $row['password'])){
    echo "Password Valid";
   }

   else {
    echo "Invalid Password";
   }

但是,如果我从数据库复制一个哈希密码值并将其放在$ row ['password']的位置,当我测试代码时,它返回true。

   if(password_verify($password, '$2y$10$kc09i9YSP.ExmUquMqRnf......')){
    echo "Password Valid";
   }

请帮助。

2 个答案:

答案 0 :(得分:3)

第一个问题是您尝试使用SQL查找哈希密码。标准程序是找到具有给定用户名的用户,并获取该用户的密码以便您进行验证。

您的另一个问题是致电$row['password'],但您尚未在代码中设置它。首先获取行,然后您可以验证密码。

这样的事情应该有效:

$username = "test";

$query = "SELECT password FROM user WHERE username = :username ";
$statement = $connection->prepare($query);
$statement->bindParam(":username", $username);
$statement->execute();
$row = $statement->fetch();

if(password_verify($password, $row['password'])){
    echo "Password Valid";
}
else {
    echo "Invalid Password";
}

答案 1 :(得分:-1)

<击>替换:

<击>
$statement->bindParam(":pass", $password);

使用:

$statement->bindParam(":pass", password_hash($password, PASSWORD_DEFAULT));

<击>

请使用Joel Hinz的答案