Zend \ Crypt \ Password \ BCrypt验证方法

时间:2015-09-22 12:57:06

标签: php zend-framework2 bcrypt password-encryption

我正在使用Zend\Crypt\Password\Bcrypt来存储在数据库中加密的密码。但现在我看起来更近了,我似乎不理解the verify method of this class

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

根据评论的功能“验证密码是否与哈希值相符”

但当我检查the php crypt function时,它正在调用第二个参数是一个可选的$salt而不是$hash字符串来验证。

我如何阅读此内容:它首先使用传递的$hash作为盐来加密我们要检查的$password,然后将它与用作盐的$hash进行比较加密的$result!?

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

1 个答案:

答案 0 :(得分:1)

Bcrypt hash有很好的文档结构,例如这个哈希:

$2y$10$aPk2mEEIkGonq6/JGr0OKOhYOdgomu61ARBjDLgb0UmHM4L8f7Hxe

字符串$2y$是前缀,10是成本,aPk2mEEIkGonq6/JGr0OKO是salt(128位,base64编码的22个字符),hYOdgomu61ARBjDLgb0UmHM4L8f7Hxe是结果哈希。

crypt函数识别这种格式并使用它的相应部分作为salt,因此将整个哈希作为第二个参数传递没有问题。