Php Zend\Crypt\Password\BCrypt验证方法

Php Zend\Crypt\Password\BCrypt验证方法,php,zend-framework2,bcrypt,password-encryption,Php,Zend Framework2,Bcrypt,Password Encryption,我使用的是在数据库中存储加密的密码。但现在我仔细看了看,似乎不明白: 根据注释“根据哈希值验证密码是否正确”的功能 但是当我检查它是否正在调用时,第二个参数是可选的$salt,而不是要验证的$hash字符串 我是如何理解的:它首先使用传递的$hash作为salt来加密我们要检查的$password,然后它将用作salt的相同$hash与加密的$result 那么我在这里错过了什么?php文档不正确,或者我不理解正在发生的事情,或者我遗漏了文档中的某些内容。Bcrypt哈希具有良好的文档结构,例如

我使用的是在数据库中存储加密的密码。但现在我仔细看了看,似乎不明白:

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

但是当我检查它是否正在调用时,第二个参数是可选的
$salt
,而不是要验证的
$hash
字符串

我是如何理解的:它首先使用传递的
$hash
作为salt来加密我们要检查的
$password
,然后它将用作salt的相同
$hash
与加密的
$result


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

Bcrypt哈希具有良好的文档结构,例如此哈希:

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


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

这有点奇怪,因为不应该通过比较两个字符串而使用密码\u verify()来验证Bcrypt。我想得到一个解释aswell@CrecketZend\Crypt\Password\Bcrypt是在将Password_*函数添加到PHP核心之前创建的。感谢您的回答。显然这不是一个问题,但非常令人困惑,我想不仅仅是对我来说。我认为他们应该更新文档,并解释第二个参数可以是salt或hash。
$2y$10$aPk2mEEIkGonq6/JGr0OKOhYOdgomu61ARBjDLgb0UmHM4L8f7Hxe