3 回答
TA贡献1836条经验 获得超3个赞
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
您可以在第三个盐之后找到盐$,它由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);
TA贡献1862条经验 获得超6个赞
由生成的散列CPasswordHelper
包含一个$
符号,后跟所选算法的代码,另一个$
是成本因素(注意:如果看到10,则实际上意味着2 ^ 10次迭代!),另一个$
是a固定数量的字符为“ salt”,然后直接加上实际的哈希。
- 3 回答
- 0 关注
- 945 浏览
添加回答
举报