作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我在这里遗漏了一些关键的东西。在 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/
我想我在这里遗漏了一些关键的东西。在 CPasswordHelper::hashPassword函数我们有几行: $salt=self::generateSalt($cost); $hash=cry
我是一名优秀的程序员,十分优秀!