gpt4 book ai didi

php - 密码哈希 API 查询

转载 作者:可可西里 更新时间:2023-11-01 06:37:10 25 4
gpt4 key购买 nike

所以我正在使用新的 PHP 5.5 密码哈希 API,但我不确定我是否理解正确。

我试过自动重新哈希每次登录,但有时我会失败,即使哈希结果无论如何都是一样的,我觉得我做错了什么。

这可能是我弄错的查询函数,因为当我检查 phpMyAdmin 时哈希值甚至都没有改变。

if (password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT))
{
$newhash = password_hash(
$_POST['user_password'], PASSWORD_BCRYPT,
['cost' => 12, 'salt' => 'superfreakingsonicdude',]
);

// update hash in database
$this->connection->query(
"UPDATE users SET user_password_hash='" . $newhash .
"' WHERE user_name='".$result_row->user_name."'"
);
}

Here is where you can find all the functions.

最佳答案

函数password_needs_rehash已经引入检查是否需要升级:

password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT)

This function checks to see if the supplied hash implements the algorithm and options provided. If not, it is assumed that the hash needs to be rehashed.

如果您无法理解此函数的作用,RFC 包含 PHP 代码中的函数。因此,如果您能阅读 PHP 代码,您应该能够阅读以下内容(请参阅介绍的部分它可以通过以下方式在用户空间中实现:):https://wiki.php.net/rfc/password_hash#password_needs_rehash

测试数据库(存储)中的哈希值是否与 PASSWORD_DEFAULT 中的算法相同是有意义的。这意味着要检查 PASSWORD_DEFAULT 在上次存储哈希和现在之间是否已更改。

现在 PASSWORD_DEFAULT PASSWORD_BCRYPT 所以它应该总是返回 false。在您的情况下,它返回 true,因为您在没有密码选项的情况下进行测试。

改变它,你应该没问题:

$options = ['cost' => 12, 'salt' => 'superfreakingsonicdude',];
########

if (password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT, $options))
########
{
$newhash = password_hash($_POST['user_password'], PASSWORD_DEFAULT, $options);
################ ########

// update hash in database
$this->connection->query(
"UPDATE users SET user_password_hash='" . $newhash .
"' WHERE user_name='".$result_row->user_name."'"
);
}

如果您想从 PHP 核心中的默认哈希算法更新中获益,也请考虑继续使用 PASSWORD_DEFAULT

关于php - 密码哈希 API 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14848526/

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