首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend\Crypt\密码\BCrypt验证方法

Zend\Crypt\密码\BCrypt验证方法
EN

Stack Overflow用户
提问于 2015-09-22 12:57:05
回答 1查看 507关注 0票数 2

我使用Zend\Crypt\Password\Bcrypt在数据库中存储加密的密码。但是现在我仔细看了看,我似乎不明白该类的验证方法

代码语言:javascript
复制
/**
 * Verify if a password is correct against a hash value
 *
 * @param  string $password
 * @param  string $hash
 * @throws Exception\RuntimeException when the hash is unable to be processed
 * @return bool
 */
public function verify($password, $hash)
{
    $result = crypt($password, $hash);
    return Utils::compareStrings($hash, $result);
}

根据注释“根据散列值验证密码是否正确”的功能

但是,当我检查php密码函数时,它调用的是第二个参数是一个可选的$salt,而不是要验证的$hash字符串。

我是如何读到这一点的:它首先使用传递的$hash作为salt加密我们要检查的$password,然后将它用作salt的同一个$hash与加密的$result进行比较!?

我在这里错过了什么?要么php-doc不正确,要么我不理解正在发生的事情,或者我遗漏了文档中的一些内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 13:59:19

Bcrypt散列有很好的文档结构,例如这个散列:

代码语言:javascript
复制
$2y$10$aPk2mEEIkGonq6/JGr0OKOhYOdgomu61ARBjDLgb0UmHM4L8f7Hxe

字符串$2y$是前缀,10是代价,aPk2mEEIkGonq6/JGr0OKO是salt (128位,base64编码了22个字符),hYOdgomu61ARBjDLgb0UmHM4L8f7Hxe是结果散列。

crypt函数识别这种格式,并将其适当的部分用作salt,因此将整个散列作为第二个参数没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32717509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档