Максимальная длина сгенерированного хеша при использовании password_hash?

я использую

password_hash($password, PASSWORD_BCRYPT);

для шифрования паролей для хранения в базе данных. Как я читал, для сгенерированных хэшей нет ограничений по длине, но мне нужно знать максимальную длину, чтобы я мог использовать ее для определения поля в моей базе данных, которое может соответствовать всем хэшам паролей (в худшем случае).

Если я установлю ограничение в 20 символов для пароля в виде простого текста, какой длины будет результат password_hash()?


person giozh    schedule 31.01.2014    source источник
comment
Рекомендуется создать VARCHAR(255).... password_hash в настоящее время создает 60-символьный хеш, чем вам нужно хранить, но это может быть изменено в будущем, если изменится базовый алгоритм. Длина хеша совершенно не зависит от длины пароля, но зачем ограничивать пароли 20 символами?   -  person Mark Baker    schedule 31.01.2014
comment
См. также фреймворк хеширования паролей PHP (PHPass) Openwall. Он портативный и защищен от ряда распространенных атак на пароли пользователей.   -  person jww    schedule 12.10.2014
comment
PASSWORD_BCRYPT или PASSWORD_DEFAULT => 60. PASSWORD_ARGON2I => около 96 (зависит от time_cost и memory_cost). PASSWORD_ARGON2ID => около 97 (зависит от time_cost и memory_cost).   -  person vee    schedule 14.07.2019


Ответы (2)


Из password_hash документации:

В настоящее время поддерживаются следующие алгоритмы:

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

PASSWORD_BCRYPT — Используйте алгоритм CRYPT_BLOWFISH для создания хэша. Это создаст стандартный хэш, совместимый с crypt(), с использованием идентификатора «$2y$». Результатом всегда будет строка из 60 символов или FALSE в случае ошибки.

Следовательно, при использовании PASSWORD_BCRYPT результатом password_hash будет строка из 60 символов.

person Tim Cooper    schedule 31.01.2014

Результатом BCrypt всегда будет строка из 60 символов. Limitless — это только ввод для функции, то есть вы не устанавливаете (и не должны) лимит на вводимые пароли.

На самом деле BCrypt внутри использует только около 72 символов, но принимает пароли любой длины.

Если вы хотите использовать функцию в ее будущей форме проверки, подобной этой (обратите внимание на PASSWORD_DEFAULT)...

password_hash($password, PASSWORD_DEFAULT);

... тогда вам следует увеличить поле базы данных. Более новые версии PHP могут заменить BCrypt другим алгоритмом хеширования по умолчанию, который может генерировать более длинные хэши.

person martinstoeckli    schedule 31.01.2014