我似乎无法让这个测试显示数据库中的哈希密码。它可以很好地显示表单中的密码。尝试进行此测试以找出为什么我无法将表单中的密码与数据库中存储的密码进行比较来验证密码。我读到了一些关于转义哈希中的 $ 符号的内容,但我不确定如何使用我正在使用的代码来做到这一点。不管怎样,有些事情是不对的。任何帮助将不胜感激!
require('../connect.php');
$username = $_POST['username-sign-in'];
$password = $_POST['password-sign-in'];
$hashedpassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
if (empty($username)) {
echo 'Please enter your username.';
exit();
}
if (empty($password)) {
echo 'Please enter your password.';
exit();
}
if (isset($username, $password)) {
$getuser = $connection->prepare('SELECT `username`, `password` FROM `users` WHERE `username` = ? AND `password` = ?');
$getuser->bind_param('ss', $username, $hashedpassword);
$getuser->execute();
$userdata = $getuser->get_result();
$row = $userdata->fetch_array(MYSQLI_ASSOC);
echo 'Password from form: ' . $hashedpassword . '<br />';
echo 'Password from DB: ' . $row['password'] . '<br />';
if (password_verify($row['password'], $hashedpassword)) {
echo 'Success.';
exit();
}
else {
echo 'Fail.';
exit();
}
}
else {
echo 'Please enter your username and password.';
$connection->close();
exit();
}
您无法对输入进行哈希处理,然后在数据库中查询该输入,因为哈希每次都会使用不同的随机盐。因此,您可以对同一密码进行 1000 次哈希处理,并得到 1000 种不同的结果。
您只需查询数据库中与用户名相关的记录,然后使用从数据库返回的密码哈希与输入密码进行比较password_verify()
.
此外,当最初在创建密码时将哈希写入数据库时(使用password_hash()
)无需转义哈希值。password_hash()
在密码验证过程中根本不使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)