我尝试使用PHP和sql设置登录/注册表单并使用密码保护我使用password_hash()和password_verify()。 password_hash()工作正常,但是当我尝试使用password_verify()验证密码时,哈希密码返回FALSE。我是PHP的新手,并且不确定为什么会发生这种情况
这是代码:
<?php
include 'db.php';
$username = mysqli_real_escape_string($con, $_POST['username']);
$password = mysqli_real_escape_string($con, ($_POST['password']));
$sql = "SELECT * FROM users WHERE `username`= '$username' ";
$query = mysqli_query($con, $sql);
while ($rows = mysqli_fetch_array($query)):
$user = $rows['username'];
$email = $rows['email'];
$passhash = $rows['password'];
endwhile;
$hash = password_verify($password, $passhash );
// just echoing so i know they are the correct values
echo $user.'<br>';
echo $email.'<br>';
echo $password.'<br>';
echo $hash.'<br>';
echo $passhash.'<br>';
if ($hash == 0 ) {
echo 'error';
}
?>
&#13;
编辑:取代&#39; dehashed&#39;用正确的术语。
答案 0 :(得分:1)
password_verify()
不会“解除”密码(因为散列是不可逆转的函数)。它的作用是,它检查一个给定的(未散列的)密码是否对应于给定的散列(然后它返回TRUE)或不(FALSE)。
请参阅http://php.net/manual/en/function.password-verify.php
确保使用
计算存储在数据库列中的密码password_hash()
请参阅http://php.net/manual/en/function.password-hash.php,否则,password_verify将无法使用作为哈希值提供的值。