【发布时间】:2014-01-30 22:45:54
【问题描述】:
我似乎无法让这个测试显示来自数据库的散列密码。它可以很好地显示表单中的密码。尝试进行此测试以找出为什么我无法从表单中验证密码与存储在数据库中的密码相比。我读到了一些关于转义散列中的 $ 符号的内容,但我不确定如何使用我正在使用的代码来做到这一点。不管怎样,有些事情是不对的。任何帮助将不胜感激!
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();
}
【问题讨论】:
-
您不能查询用户提供的密码,这就是使用哈希的全部想法。删除
AND password = ?每次哈希密码时哈希都会不同 -
@PeeHaa 您是否错过了密码被散列进行比较的部分?
$hashedpassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]); -
@PeeHaa 对于那些似乎一心要责备别人的人,你从来没有提供过可靠的答案或解决方案。
-
其实它设置为 32...我相信我找到了我的问题 lmao。感谢您所有的帮助!如果问题仍未解决,我会报告。
标签: php mysql password-hash