Php 用户登录时如何验证哈希密码

Php 用户登录时如何验证哈希密码,php,Php,有人能告诉我,当有人登录时,我应该如何验证哈希密码 这是我的注册码: $db_password = password_hash($password, PASSWORD_DEFAULT); // Enter info into the Database. $info2 = htmlspecialchars($info); $sql = mysql_query("INSERT INTO users (first_name, last_name, email_

有人能告诉我,当有人登录时,我应该如何验证哈希密码

这是我的注册码:

$db_password = password_hash($password, PASSWORD_DEFAULT);

// Enter info into the Database.
$info2 = htmlspecialchars($info);
$sql = mysql_query("INSERT INTO users 
                   (first_name, last_name, email_address, username, password, signup_date)
                    VALUES('$first_name', '$last_name', 
                           '$email_address', '$username',
                           '$db_password', now())") 
                 or die (mysql_error());
这是我在登录时运行的检查用户代码

$hash = password_hash($password, PASSWORD_DEFAULT);

// check if the user info validates the db
$sql = mysql_query("SELECT * 
                    FROM users 
                    WHERE username='$username' 
                      AND password='$hash' 
                      AND activated='1'");
$login_check = mysql_num_rows($sql);

我想不出来。

您的验证是错误的……您正在重新对密码进行哈希运算,这将导致一个全新的salt……因此哈希值完全不同。当密码被散列(正确)时,它们使用一个足够长的salt(随机字符串),以防止彩虹攻击
password\u hash
在幕后为您完成所有这些操作

但是,这意味着您必须确保使用相同的salt,以便通过将密码与散列一起存储来验证密码。对于您正在使用的代码,它为您执行这部分操作,salt是
password\u hash
结果的前缀

当用户登录时,您需要执行以下操作:

if( password_verify($loginPasswordText, $hashStoredInDb) ) {
    //SUCCESS
}

登录时无需再次对密码进行哈希运算,只需使用
password\u verify()
函数在登录时验证存储的密码和给定的密码即可。请在此处查看有关密码哈希API的更多信息

现在试着这样做

 <?php
    // this is the example hashed password that you have to select from Database.
    $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

    if (password_verify('password_given_at_login', $hash)) {
        echo 'Password is valid!';
    } else {
        echo 'Invalid password.';
    }
    ?>


登录时忘记添加我遇到无效凭据消息当您检查密码时,您从数据库中读取现有哈希值,并使用以对照用户请输入的密码进行检查。它们不再得到维护,而是在使用。而是学习,并使用。此外,您在查询中使用变量的方式使我相信您可能是Jay的受害者—sql注入是正确的。有人指出了这一点。事实上,在我弄明白这一点之后,这是我下一步要做的事情。