Создание хэша пароля в проекте Laravel - PullRequest
0 голосов
/ 11 апреля 2019

Я создал пользователя и дал ему пароль 'secret'.Хеш, который был сгенерирован в процессе регистрации:

$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm

Я хотел сгенерировать его в коде, поэтому я использовал Hash :: make ('secret') и получил:

$2y$10$Hnbg7DCp2VObns4cbr580uo9VTYgzJF2BSNSpA7S8BYjkAgfUlH.G

наконец-то я использовал bcrypt ('secret') и получил:

 $2y$10$5g1bhkHB7kRk8SkM3yS/YOifsEesjZ31YeYnRlE.bxSBmZutVCuui

Это все разные хэши. Как я могу сгенерировать такой, который позволил бы мне изменить пароль внутри моего кода?

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

Это потому, что bcrypt не работает как SHA-256, он использует ключ, который изменит результат самого хэша для той же строки. В Laravel вы можете использовать Hash::check('plain-text', $hashedPassword) для проверки пароля, но вы никогда не получите тот же результат для того же пароля. отметьте здесь

0 голосов
/ 11 апреля 2019

Bycrypt - более безопасный алгоритм хеширования паролей. В отличие от md5 () или SHA1 () bycrypt не всегда генерирует одно и то же хэшированное значение для конкретной строки.

Поэтому, когда вы храните хешированный пароль в базе данных, вы будете использовать

$password = bcrypt($input['password']);

Впоследствии, когда вы хотите проверить во время входа в систему, вы просто устанавливаете простой текстовый пароль (как вы могли бы получить его из пользовательского ввода) и запускаете функцию с именем Auth :: попытки (), чтобы сопоставить пароль.

$userdata = array(
    'username'      => $input['username'],
    'password'      => $input['password'],
);


if (Auth::attempt($userdata)) {
    // Password matched
}

И если вы хотите явно проверить пароль в виде простого текста, соответствующий его хешу, используйте Hash :: check (), как показано ниже:

Hash::check('plain-text-password', 'hashed-password);
0 голосов
/ 11 апреля 2019

Работает как задумано, bcrypt не всегда генерирует один и тот же хеш. Функция Laravels Hash::check() вернет true для любого действительного хэша данного пароля.

Для получения более подробной информации, смотрите здесь: https://stackoverflow.com/a/8468936/6622577

0 голосов
/ 11 апреля 2019

Вы можете использовать bcrypt (секретный) и оставить его на laravel и проверить его (все работает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...