Yii2生成的密码哈希每次都不一样



我试图使用Yii的generatePasswordHash((函数,但每次都会使用相同的密码获得不同的哈希。

$this->password = Yii::$app->getSecurity()->generatePasswordHash($this->password);

这里3个散列创建的密码"测试":

$2y$13$wsvC4i8YMwKKHJ2K5iYRG.Z0KBetOh3BctVpJN5pVkXGOcW85hRkO ,
$2y$13$QfV2Qxlj4F5gUh1wIL2WUewoZ55CKYKevjRmRqrenxq8L5ym5xX9. ,
$2y$13$rDArvLa8hnpDGiiDdCs7be4iTsr2T3XMXmnapynuD1i1ekbz8zF4m

有人知道发生了什么事吗?

编辑:

当我尝试使用进行验证时

Yii::$app->getSecurity()->validatePassword($password, $this->password)

它返回false。

EDIT#2:
函数如下:

public function validatePassword($password)
{
return Yii::$app->getSecurity()->validatePassword($password, $this->password);
}

$password是输入密码,$this->password是散列。

奇怪的是,password_verify($password, $this->password)有效,但Yii的验证器没有。

所有哈希都是正确的。因为散列算法为同一个密码生成不同的散列。密码变量在您的代码中来自哪里?它应该是一个密码字符串,而不是散列。

$hash = "hashed version";
$password = "string password";
if (Yii::$app->getSecurity()->validatePassword($password, $hash)){
// password correct
}

添加到efendi的答案中。

每次运行Yii的generatePasswordHash((函数时获得不同的哈希是正常行为。

根据哈希验证密码需要"hash"中的"salt"。

哈希中"$2y$13$"之后的前22个字符是salt。

validatePassword($password,$hash(函数从散列中获取salt,使用salt对$password进行散列,如果密码正确,salt应该获得与$hash相同的散列。

最新更新