散列变量在 password_verify () php 中不起作用
hash variable not work in password_verify () php
我使用 password_hash()
散列密码,并使用 password_verify();
进行验证
当我直接在变量中写入散列值时,值为 True
$hash = 'y$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';
但是当我从 MySQL 调用值时,当我把它放在这个函数中时,该值是 false ,我对该值进行回显并且该值是 true ,但我不知道为什么是 false当我把它放在 password_verify();
我查找了之前所有关于此问题的问题,但没有找到任何答案,这是我的代码
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";
这里似乎有两个问题。来自 ...
- 您在对密码进行哈希处理之前使用了
mysqli_real_escape_string()
。永远不要在插入密码之前修改密码,保持密码干净。如果密码包含例如单引号,此功能可能会更改密码。
- 在插入哈希之前,您已将
\n
连接到哈希,比较时,它没有。在插入此数据时散列密码时需要将其删除。
这些需要更正(real_escape()
不应该出现在密码上,并且换行符已删除),并在进行这些更正后再次插入密码。
除此之外,
if(isset($_POST['submit'])=="Log In") {
不是你想的那样。它在技术上是可行的,因为它会将布尔值与真值进行比较(因此如果设置为 true == true
,否则为 false == true
)。它应该只是
if (isset($_POST['submit'])) {
见
我使用 password_hash()
散列密码,并使用 password_verify();
当我直接在变量中写入散列值时,值为 True
$hash = 'y$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';
但是当我从 MySQL 调用值时,当我把它放在这个函数中时,该值是 false ,我对该值进行回显并且该值是 true ,但我不知道为什么是 false当我把它放在 password_verify();
我查找了之前所有关于此问题的问题,但没有找到任何答案,这是我的代码
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";
这里似乎有两个问题。来自
- 您在对密码进行哈希处理之前使用了
mysqli_real_escape_string()
。永远不要在插入密码之前修改密码,保持密码干净。如果密码包含例如单引号,此功能可能会更改密码。 - 在插入哈希之前,您已将
\n
连接到哈希,比较时,它没有。在插入此数据时散列密码时需要将其删除。
这些需要更正(real_escape()
不应该出现在密码上,并且换行符已删除),并在进行这些更正后再次插入密码。
除此之外,
if(isset($_POST['submit'])=="Log In") {
不是你想的那样。它在技术上是可行的,因为它会将布尔值与真值进行比较(因此如果设置为 true == true
,否则为 false == true
)。它应该只是
if (isset($_POST['submit'])) {
见