首页 >后端开发 >php教程 >如何根据数据库中的加盐哈希验证用户密码?

如何根据数据库中的加盐哈希验证用户密码?

Patricia Arquette
Patricia Arquette原创
2024-11-13 10:00:04850浏览

How to Verify a User Password Against a Salted Hash in a Database?

如何检查密码是否与数据库中存储的加盐密码匹配

构建安全应用程序时,处理加盐密码至关重要。然而,根据存储的加盐哈希有效验证用户密码可能具有挑战性。本文将指导您完成从数据库检索加盐密码和验证用户身份所涉及的步骤。

检索加盐密码:

下面的示例代码演示了如何使用 mysqli 连接从 MySQL 数据库检索加盐密码哈希:

<?php
$servername = 'localhost';
$username = 'root';
$pwd = '';
$dbname = 'lp001';

$connect = new mysqli($servername,$username,$pwd,$dbname);

if ($connect->connect_error){
    die('connection failed, reason: '.$connect->connect_error);
}

$name = mysqli_real_escape_string($connect, $_POST['name']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false){
    die(mysqli_error());
}

$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
?>

此代码连接到数据库,清理用户输入,并从用户表中检索与给定用户名关联的盐。加盐对于验证密码至关重要。

验证用户密码:

检索到加盐密码哈希后,您可以验证用户提供的密码是否匹配它。以下代码展示了如何使用password_hash() 和password_verify() 函数来执行此操作:

<?php
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltedPW = $password.$salt;
$hashedPW = hash('sha256', $saltedPW);

$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";

if (mysqli_query($connect, $sqlQuery)){
    echo '<h1>Welcome to the member site '.$name.'</h1>';
}else{
    echo 'error adding the query: '.$sql_q.'<br> Reason: '.mysqli_error($connect);
}
?>

这里,使用检索到的盐对提供的密码进行加盐处理,然后使用安全散列函数进行散列。然后将散列密码与数据库中存储的散列密码进行比较。如果密码匹配,则用户通过身份验证。

通过执行以下步骤,您可以有效地从数据库检索加盐密码并验证用户的密码,而无需暴露实际密码。这种方法确保了用户凭据的安全,同时提供高效、安全的身份验证。

以上是如何根据数据库中的加盐哈希验证用户密码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn