password_verify不验证哈希
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了password_verify不验证哈希相关的知识,希望对你有一定的参考价值。
我通过password_hash哈希插入的密码。我使用password_verify验证它们。
但是,当我在我的数据库中插入哈希密码并尝试验证它时,两个输出总是彼此不同。
我的网页如下,
main_login.php(表格):
<?php include 'header.php';?>
<body>
<form role="form" method="post" action="login.php">
<div class="form-group">
<label for="usrname">Username:</label>
<input type="text" class="form-control" name="usrname" placeholder="Enter username">
</div>
<div class="form-group">
<label for="passwrd">Password:</label>
</div>
<input type="password" class="form-control" name="passwrd" placeholder="Enter password">
<br>
<input type="checkbox">Remember Me
<br>
<br>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</body>
</html>
login.php(handler):
<?php
include 'vars.php';
include 'header.php';
$sql="SELECT * FROM members WHERE usrname='$usrname'";
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result);
$row=mysqli_fetch_row($result);
$verify=password_verify($hash,$row[2]);
if($verify){
$_SESSION["usrname"]=$usrname;
echo "Correct";
}
else {
echo "user: " . $usrname. "<br>";
echo "pass: " . $hash. "<br>";
echo "db: " . $row[2]."<br>";
echo "Wrong Username or Password";
}
?>
vars.php:
<?php
$h='localhost';$u='caelin';$p='****';$d='ombouwnh';
$con=mysqli_connect($h,$u,$p,$d);
$usrname=$_POST['usrname'];
$passwrd=$_POST['passwrd'];
$hash=password_hash($passwrd, PASSWORD_DEFAULT);
?>
当我尝试使用用户名'caca'和密码'caca'登录时,每次重试时,我都会得到不同的输出。我在stackoverflow上找不到这个特殊问题。
TIA
PS。如果您需要更多详细信息,请索取
答案
函数password_verify();
有两个参数;非散列输入,以及与之比较的存储散列。它会自动散列非散列输入,以将其与存储的版本进行比较。因此,您的初始代码重新散列了已经散列的密码。应该是这样的:
$verify=password_verify($_POST['passwrd'],$row[2]);
if($verify){
$_SESSION["usrname"]=$usrname;
echo "Correct";
}
else {
echo "user: " . $usrname. "<br>";
echo "pass: " . $hash. "<br>";
echo "db: " . $row[2]."<br>";
echo "Wrong Username or Password";
}
另一答案
你重新密码 - 只需将明文密码和你的哈希值(从db)传递给password_verify即可。
以上是关于password_verify不验证哈希的主要内容,如果未能解决你的问题,请参考以下文章
PHP password_verify() 与 Python bcrypt.hashpw()
为啥 hash_equals 和 password_verify 不能正常工作?
PHP PDO MySQL password_verify问题