Длина соли выдувки для функции Crypt ()?
-
10-10-2019 - |
Вопрос
Согласно Документация Crypt (), соль должна быть 22 базовой 64 цифр от алфавита "./0-9A-Za-Z".
Это пример кода, который они приводят:
crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
Первая запутанная часть заключается в том, что соль имеет 25 символов, а не 22.
Вопрос 1: Означает ли это, что соль должна быть дольше чем 22 символа?
Затем я сам проверил функцию и что -то заметил. Если я использую соль 20 символов, я получаю это
// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2
Итак, когда я использовал соль 20 символов, вся соль находится в выходе. Что удобно, потому что мне не нужно хранить соль в отдельном месте тогда. (Я хочу использовать случайные соли). Я мог бы прочитать соль обратно из сгенерированного хэша.
Однако, если я использую соль 22 персонажа, как говорится в документации, или более длинную, соль отрезана в конце.
// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone
// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash
Вопрос 2: Итак, какова правильная длина соли? 20? 22? Дольше?
Вопрос № 3: Кроме того, хорошей идеей читать соль из хэша, когда пришло время проверять пароли? Вместо того, чтобы хранить соль в отдельном поле и читать ее оттуда. (Что кажется избыточным, так как соль кажется включенной в хэш).
Решение
Соли выдувки должны быть в длину 22 чара (включая следы за $, так что 21) - вы можете дважды проверить с var_dump(CRYPT_SALT_LENGTH)
, Я не могу проверить это сейчас, но я предполагаю, что меньше chars вернет ошибку, и больше Chars будет усечено.
Что касается вашего третьего вопроса: да, вы должны прочитать и проверить хэш, используя параметры встроенной соли (и стоимость) из самого хэша.