【发布时间】:2017-04-25 14:06:09
【问题描述】:
我使用password_hash() 对我的密码进行哈希处理,并使用password_verify(); 进行验证
当我直接在变量中写入哈希值时,值为 True
$hash = '$2y$10$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';
但是当我从 MySQL 调用该值时,当我把它放在这个函数中时,它的值是假的,我为这个值做回显并且值是真的,但是我不知道为什么当我把它放在 @ 时是假的987654324@
我查找有关此问题的所有先前问题,但没有找到任何答案,这是我的代码
if(isset($_POST['submit'])=="Log In") {
$password = 'aliali12';
$sql = mysqli_query($con, "SELECT * FROM users WHERE user_id = 1");
$hashed_pass = mysqli_fetch_assoc($sql);
if (password_verify("$password",$hashed_pass['user_pass'])){
echo "Correct Password";
} else {
echo 'There are some wrong';
}
}
编辑:
这里是用来散列密码的代码:
$password = mysqli_real_escape_string($con, $_POST['changePassword']);
$hash = password_hash("$password", PASSWORD_BCRYPT)."\n";
【问题讨论】:
-
删除密码变量周围的
"" -
密码正确我的哈希变量有问题
-
$hashed_pass['user_pass']的内容是什么?你一开始是怎么散列的?确保该列的长度足够(至少 60 个字符),否则它可能会因为转动而默默地让您失败。 -
你不应该在密码上使用
mysqli_real_escape_string()(在散列之后,没有它就可以安全存储,因为散列中没有单引号),\n也可能是这里的问题. -
在散列密码之前不要转义密码。您的示例密码无关紧要,但它会导致例如包含斜杠的密码出现问题。
标签: php mysql password-hash