Yii2 - 每次生成的密码哈希值都不同

问题描述 投票:0回答:1

我试图使用Yii的generatePasswordHash()函数,但每次都得到一个不同的哈希值。

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

这里有3个用密码 "test "创建的哈希值。

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

有人知道这是怎么回事吗?

EDIT.当我尝试用

当我试着用 "test "来验证时

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的验证器不工作。

php hash yii2 passwords
1个回答
1
投票

所有的哈希值都是正确的。因为哈希算法会对同一个密码做出不同的哈希值。在你的代码中,密码变量从哪里来?应该是密码字符串而不是哈希值。

$hash = "hashed version";
$password = "string password";

if (Yii::$app->getSecurity()->validatePassword($password, $hash)){
   // password correct
}

0
投票

补充一下fendi的答案。

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

验证密码的哈希值需要'hash'中的'salt'。

哈希值中'$2y$13$'之后的前22个字符就是盐值。

validatePassword($password, $hash)函数从哈希值中获取盐分,使用盐分对$password进行哈希处理,如果密码正确的话,应该得到与$hash相同的哈希值。

© www.soinside.com 2019 - 2024. All rights reserved.