gpt4 book ai didi

hash - yii CPasswordHelper : hashPassword and verifyPassword

转载 作者:行者123 更新时间:2023-12-02 10:35:12 25 4
gpt4 key购买 nike

我想我在这里遗漏了一些关键的东西。在 CPasswordHelper::hashPassword函数我们有几行:

$salt=self::generateSalt($cost);  
$hash=crypt($password,$salt);

return $hash;

CPasswordHelper::verifyPassword 中有这一行:

$test=crypt($password,$hash);  

return self::same($test, $hash);

盐呢?据我了解,它甚至没有被保留,但它没有任何意义,所以我猜我没有完全理解它。

最佳答案

CPasswordHelper 的工作方式类似于 PHP 的函数 password_hash()password_verify() ,它们是 crypt() 函数的包装器。当您生成 BCrypt 哈希时,您将获得一个 60 个字符的字符串,其中包含盐。

// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

变量 $hashToStoreInDb 现在将包含如下哈希值:

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| | salt = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt

在第三个$之后可以找到salt,它是由password_hash()使用操作系统的随机源自动生成的。因为盐包含在结果字符串中,所以函数password_verify(),或者实际上是包装的crypt函数,可以从那里提取它,并且可以使用相同的盐(和相同的成本因子)计算散列。这两个哈希值就具有可比性了。

// 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);

关于hash - yii CPasswordHelper : hashPassword and verifyPassword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394137/

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