use*_*466 5 passwords hash salt yii
我想我在这里缺少一些关键的东西.在CPasswordHelper::hashPassword函数中我们有行:
$salt=self::generateSalt($cost);
$hash=crypt($password,$salt);
return $hash;
Run Code Online (Sandbox Code Playgroud)
在CPasswordHelper::verifyPassword这条线上:
$test=crypt($password,$hash);
return self::same($test, $hash);
Run Code Online (Sandbox Code Playgroud)
盐怎么样?根据我的理解,它甚至没有保留,但它没有任何意义,所以我猜我完全不理解它.
mar*_*kli 22
CPasswordHelper的工作方式类似于PHP的函数password_hash()和password_verify(),它们是crypt()函数的包装器.生成BCrypt哈希时,您将获得包含盐的60个字符的字符串.
// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)
变量$ hashToStoreInDb现在将包含这样的哈希值:
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| | salt = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt
Run Code Online (Sandbox Code Playgroud)
你可以在第三个之后找到的盐$,它是由password_hash()使用操作系统的随机源自动生成的.因为salt包含在结果字符串中,所以函数password_verify()或实际上包装的crypt函数可以从那里提取它,并且可以计算具有相同salt的哈希值(以及相同的成本因子).那两个哈希值可以比较.
// 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5945 次 |
| 最近记录: |