Как пароль sh и соль хранятся в Symfony базе данных? - PullRequest
0 голосов
/ 28 января 2020

Я перемещаю проект из Symphony в Django. Мне нужно импортировать всех пользователей с паролями.

Для этого мне нужно знать, как пароли хранятся в базе данных. Для каждого пароля пользователя мне нужно знать 4 вещи:

  • алгоритм использовался для генерации га sh

  • количество итераций

  • соль использовалась для получения га sh

  • , полученного га sh

Проект построен на Symphony 3.4. Разработчики сказали мне, что они используют алгоритм хеширования по умолчанию, и это SHA512

Полагаю, число итераций равно 1.

Осталось найти соль и результат ha sh. Оба должны храниться в базе данных.

В поле пароля в базе данных хранятся такие строки: fOEJQT89OWYfI+hBHT28RpTQRiWnyo49Rtxqv6DWY/EJ6cSkFdZ0Y36VaqjWI+1NNhRGCHBBGJvwdMD1c7GZfw==

Я ожидаю найти га sh и здесь соль, НО здесь 88 символов. SHA512 имеет длину 64 байта га sh.

Какой формат данных хранится в этом поле? Здесь хранится и га sh, и соль?

1 Ответ

1 голос
/ 28 января 2020

Вы должны проверить app/config/security.yml для используемых кодеров. Предполагая, что у вас есть что-то вроде следующего:

security:
    encoders:
        App\Entity\User: 'sha512'

Он будет использовать кодировщик SHA512 с настройками по умолчанию. Посмотрев на соответствующий кодировщик MessageDigestPasswordEncoder, мы можем понять, что он будет использовать 5000 итераций по умолчанию, а затем закодировать его с помощью base64.

Осталось только выяснить, использовалась ли соль и если да, то как он был создан. Поскольку SHA512 не генерирует свою собственную соль, вы должны взглянуть на класс пользователя и проверить его метод User::getSalt. Если это возвращает ноль, то соль не использовалась, иначе вам придется подражать c ее поведению или получить результат при генерации пароля.

...