шифрование пароля — может кто-нибудь уточнить, как работает функция PHP crypt ()?

Из моего понимания crypt (string, salt) берет соль, прикрепляет ее к зашифрованной версии строкового параметра.

$pw = "secret";
$format_and_salt = $2y$10$MWRmZTkwMTc5ZGJjZDI1NT;
$hash = crypt($pw, $format_and_salt);

$ hash сохраняется в столбце базы данных hashed_password как $2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

или сломан:

первая часть — $ format_and_salt: $2y$10$MWRmZTkwMTc5ZGJjZDI1N (sans the 'T')

+

вторая часть — это зашифрованный $ pw: OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

Если я затем снова использую crypt для проверки пароля, который пользователь отправляет в $ _POST для сохраненного hashed_password в базе данных, выходные данные для обоих случаев не отражают логику, описанную мной выше. Так что я что-то упустил.

Итак, тогда:

$existing_hash = $admin['hashed_password'] ($ admin — это массив, в конечном счете полученный из запроса).

а также

crypt($pw, $existing_hash) возвращается $2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

который идентичен $hash выше. Это работает для проверки или аннулирования представления пользователей в $ _POST, но, как уже упоминалось, если я буду следовать логике для первого crypt (), я ожидаю:

первая часть — $ Существующий_хэш: $2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

+

вторая часть — это зашифрованный $ pw: OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

который я ожидал бы объединить как:
$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqmOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

Может кто-нибудь объяснить, почему исходная крипта и крипта чуть выше, которая использовалась для проверки первой, имеют одинаковый вывод? Заранее спасибо.

0

Решение

Вы используете шифрование Blowfish — используются только первые 22 символа соли. Это одно из преимуществ использования blowfish.

От Руководство по PHP:

Хэширование Blowfish с солью выглядит следующим образом: «$ 2a $», «$ 2x $» или «$ 2y $», двухзначный параметр стоимости, «$» и 22 символа из алфавита »./0-9A-Za -z».

Это означает, что соль из $ существующие_hash в конечном итоге $2y$10$MWRmZTkwMTc5ZGJjZDI1N — точно так же, как и ранее.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]