gpt4 book ai didi

php - 未使用函数 password_verify 验证密码

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:59 24 4
gpt4 key购买 nike

我想我已经使用函数 PASSWORD 直接从 mysql 数据库散列了密码(我在这里做错了吗?)。我正在尝试使用此代码验证该密码:

    if($submit)
{
$first=$_POST['first'];
$password=$_POST['password'];
$hash="*85955899FF0A8CDC2CC36745267ABA38EAD1D28"; //this is the hashed password i got by using function PASSWORD in database
$password=password_verify($password,$hash);
$db = new mysqli("localhost", "root","","learndb");
$sql = "select * from admin where username = '" . $first . "' and password = '". $password . "'";
$result = $db->query($sql);
$result=mysqli_num_rows($result);


if($result>0)
{

session_start();
$_SESSION['logged_in'] = true;
session_regenerate_id(true);
header("Location:loginhome.php");

}
}

但是密码不匹配。我在这里缺少什么?

更新:

在所有建议之后,我使用了 php 代码中的 password_hash 来存储到数据库中。

$db = new mysqli("localhost", "root","","learndb");
$password=password_hash('ChRisJoRdAn123',PASSWORD_DEFAULT);
$sql="INSERT INTO admin (username,password)values('ChrisJordan','$password')";
$db->query($sql);

密码仍然不匹配。

最佳答案

无法在数据库中搜索加盐密码哈希。要计算哈希值,您需要使用 password_hash() 函数,就像您在插入语句中所做的那样。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

要检查密码,您首先需要仅按用户名搜索(使用准备好的查询以避免 sql 注入(inject)):

$sql = 'select * from admin where username = ?';
$db->prepare($sql);
$db->bind_param('s', $first);

当你最终从数据库中得到存储的散列时,可以这样检查:

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

关于php - 未使用函数 password_verify 验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35146205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com