Максимальная длина поля пароля пользователя с "алгоритмом: авто"?

Symfony 4.3 устарел алгоритм bcrypt, см. UPGRADE-4.3.md:

Настройка кодировщиков с использованием argon2i или bcrypt в качестве алгоритма устарела, вместо этого используйте auto.

Поэтому я изменил security.yaml на:

encoders:
    App\Entity\User:
        algorithm: auto

Проблема в том, что после переключения на auto хешированная строка длиннее:

'INSERT INTO users (..., password,...) VALUES (...)' с параметрами [..., "$ argon2id $ v = 19 $ m = 65536, t = 6, p = 1 $ d2RhZjVuaWJsSnE0TW5haA $ ycOn7EHjPOoBTSa6SHDOBWL2AvwfPNjAstlSTEMmPpU ",...]:

SQLSTATE [22001]: Строковые данные, усеченные справа: 1406 Слишком длинные данные для столбца "пароль" в строке 1

Длина этой строки составляет 97 символов, в то время как длина моего столбца пароля составляла 64. Не найдено документации о максимально возможной длине с атрибутом "auto", это 97? Или это может быть больше?

1 ответ

Решение

Как сказал @Cerad в комментариях, auto режим, скорее всего, всегда будет выдавать пароли, которые поддерживаются password_hash() встроенная функция PHP (в зависимости от платформы).
Поэтому вы можете смело полагаться на подсказку, приведенную в документации к password_hash():

PASSWORD_DEFAULT - [...] Обратите внимание, что эта константа предназначена для изменения во времени по мере добавления новых и более сильных алгоритмов в PHP. По этой причине длина результата от использования этого идентификатора может меняться со временем. Поэтому рекомендуется хранить результат в столбце базы данных, который может расширяться за пределы 60 символов (255 символов будет хорошим выбором).

Другие вопросы по тегам