如何检查数据库中散列的密码?使用标准PHP5 password_hash()

时间:2014-08-31 06:03:15

标签: php mysql

我使用PHP5的password_hash()标准方法,据我所知它为每次运行生成不同的哈希值。

请参阅:correct use of password_hash

问题是,如果我将散列密码存储到我的数据库(MySQL)中, 如何检查用户是否在登录页面输入了正确的密码?

在我的signup.php中,我有类似的内容:

include 'PasswordHash.php' // contains various standard methods

$submitted_password = password_hash($_POST['password'], PASSWORD_BCRYPT);

$add = mysqli_query($connection, "INSERT INTO `users` VALUES(NULL,'$submitted_username','$submitted_email','$submitted_password')");

在我的login.php中,我有:

$submitted_password = $_POST['password'];
$hashed_password = password_hash($_POST['password'],PASSWORD_BCRYPT);

if (password_verify($submitted_password, $hashed_password)) {
echo "<script type='text/javascript'>alert('$pass');</script>";
} else {
echo "<script type='text/javascript'>alert('$fail');</script>";
}

这显然会回应PASS,因为login.php会对密码进行一次哈希并比较它们, 但如果我试试

echo $hashed_password;

,它与我在数据库中的完全不同,显然是因为它会生成不同的盐并用它来散列。

最终问题: 那么,当用户提交的密码每次都被分成不同的值时,如何检查用户是否输入了正确的密码?

我不知道你是否能理解这个问题。我只是不知道如何更好地描述这个问题。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

当用户提交的密码每次都被分成不同的值时,如何检查用户是否输入了正确的密码?

假设您以正确的方式执行此操作并使用所有必需的参数(包括相同的salt)提供password_hash(),则不会有所不同。请参阅文档http://php.net/manual/pl/function.password-hash.php如何执行此操作。如果没有提供salt,则会创建一个随机盐,但它会导致不同的哈希值。

相关问题