PHP密码_verify没有dehashing?

时间:2016-10-30 19:16:40

标签: php

我尝试使用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;
&#13;
&#13;

编辑:取代&#39; dehashed&#39;用正确的术语。

1 个答案:

答案 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将无法使用作为哈希值提供的值。