Yii2 - сгенерированный пароль ha sh каждый раз отличается - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь использовать функцию Yii generatePasswordHa sh (), но каждый раз получаю разные га sh с тем же паролем.

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

Здесь 3 хеша, созданные с помощью пароль "test":

$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);
}

$ пароль - входной пароль, а $ this-> пароль - ха sh.

Странно password_verify($password, $this->password) работает, но верификатор Yii - нет.

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Все хеши верны. Потому что алгоритмы ha sh создают разные хэши для одного и того же пароля. Откуда берется переменная пароля в вашем коде? Это должна быть строка пароля, а не ха sh.

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

if (Yii::$app->getSecurity()->validatePassword($password, $hash)){
   // password correct
}
0 голосов
/ 03 мая 2020

Добавление к ответу эфенди.

Получение разных значений ha sh каждый раз, когда запускается функция Yii generatePasswordHa sh (), это нормальное поведение.

Для проверки пароля против ha sh требуется 'соль' из 'ha sh'.

Первые 22 символа после '$ 2y $ 13 $' в ха sh это соль.

Функция validatePassword ($ password, $ ha sh) получает соль с ха sh, хэширует пароль $ с помощью соли, которая должна получить тот же ха sh, что и $ ha sh если пароль будет правильным.

...