Из моего понимания 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
Может кто-нибудь объяснить, почему исходная крипта и крипта чуть выше, которая использовалась для проверки первой, имеют одинаковый вывод? Заранее спасибо.
Вы используете шифрование Blowfish — используются только первые 22 символа соли. Это одно из преимуществ использования blowfish.
Хэширование Blowfish с солью выглядит следующим образом: «$ 2a $», «$ 2x $» или «$ 2y $», двухзначный параметр стоимости, «$» и 22 символа из алфавита »./0-9A-Za -z».
Это означает, что соль из $ существующие_hash в конечном итоге $2y$10$MWRmZTkwMTc5ZGJjZDI1N
— точно так же, как и ранее.
Других решений пока нет …