gpt4 book ai didi

php - 如何使用 php 的 password_hash() 方法..?

转载 作者:行者123 更新时间:2023-12-01 00:39:51 25 4
gpt4 key购买 nike

我在登录时收到密码不匹配,当用户注册时,我将密码保存为

$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);

当用户登录时,我正在这样检查密码,

    $hash = password_hash($password, PASSWORD_BCRYPT);
$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$passwordcheck = $query->row()->password;
if (password_verify($passwordcheck, $hash)) {
return true;
} else {
return false;
}

但它总是返回密码不匹配..为什么?????非常感谢任何帮助...

最佳答案

您应该检查未经哈希处理的原始密码,因为 password_verify() 使用创建哈希密码时使用的哈希例程对原始密码进行重新哈希处理。

如果您查看 password_hash() 的结果,就会发现散列中存储了有关使用哪个散列例程创建此散列及其生成方式的信息

$password = 'FredsTheMan';

$hash = password_hash($password, PASSWORD_BCRYPT);

if (password_verify($password, $hash)) {
return true;
} else {
return false;
}

这方面的另一个常见错误是没有为您在数据库表上使用的列提供足够的字符来保存哈希的完整结果

使用 PASSWORD_BCRYPT 生成的哈希为 60 个字符

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

请注意,当将来提供其他哈希值时,它们可能会导致哈希值超过 60 个字符

所以简而言之,你的代码应该是

$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$pwd_from_db = $query->row()->password;

if (password_verify($this->input->post('password'), $pwd_from_db)) {
return true;
} else {
return false;
}

关于php - 如何使用 php 的 password_hash() 方法..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35683537/

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