我使用Zend\Crypt\Password\Bcrypt在数据库中存储加密的密码。但是现在我仔细看了看,我似乎不明白该类的验证方法
/**
* 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不正确,要么我不理解正在发生的事情,或者我遗漏了文档中的一些内容。
发布于 2015-09-22 13:59:19
Bcrypt散列有很好的文档结构,例如这个散列:
$2y$10$aPk2mEEIkGonq6/JGr0OKOhYOdgomu61ARBjDLgb0UmHM4L8f7Hxe字符串$2y$是前缀,10是代价,aPk2mEEIkGonq6/JGr0OKO是salt (128位,base64编码了22个字符),hYOdgomu61ARBjDLgb0UmHM4L8f7Hxe是结果散列。
crypt函数识别这种格式,并将其适当的部分用作salt,因此将整个散列作为第二个参数没有问题。
https://stackoverflow.com/questions/32717509
复制相似问题