使用password_hash和password_verify,为什么数据库中的密码没有哈希?

时间:2014-12-19 13:39:32

标签: php mysql

我想这个标题非常自我解释。我在login.php中使用了password_hash函数。当我查看数据库时,我看到密码没有哈希。这是正确的还是我做错了什么?这是我的一段代码(safe_post_value是我自己的函数来转义字符串):

<?php 
session_start();

if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $safe_username = safe_post_value($username);
    $safe_password = safe_post_value($password);
    $hashed_password = password_hash($safe_password, PASSWORD_DEFAULT);
    $verified_password = password_verify($password, $hashed_password);

    $query = "SELECT * FROM `members` WHERE '$safe_username' = `username`";

    $result = mysqli_query($connection, $query);
    if ($result = mysqli_query($connection, $query)) {
        if ($verified_password){
            while ($row = mysqli_fetch_assoc($result)) {
                printf("%s, %s\n", $row['username'], $row['password']);
            }
        }
    } else {
        $message = "error";
        echo $message;
    }
    mysqli_free_result($result);
}
?>
<form action="login.php" method="POST">
    <input type="text" name="username" placeholder="gebruikersnaam">
    <input type="password" name="password" placeholder="wachtwoord">
    <input type="submit" name="submit" value="verstuur">
</form>

因此,要明确:此代码正常运行,但我只是想知道密码是否在数据库中没有散列是正常的。

1 个答案:

答案 0 :(得分:-1)

您不需要

$hashed_password = password_hash($safe_password, PASSWORD_DEFAULT);
$verified_password = password_verify($password, $hashed_password);

你从$ password生成$ safe_password,所以它肯定是一样的。 您的查询必须像

$query = "SELECT * FROM members WHERE username = ".$safe_username." and password = ".$safe_password"