2013-09-13 7 views
5

Какова максимальная длина пароля, которую я могу использовать с PHP 5.5 password_hash() и password_verify()?PHP password_hash() password_verify() максимальная длина пароля?

+0

Вы прочитали страницу документа по этой функции? –

+0

Да, да. Я смущен, потому что у BCRYPT есть максимальная длина пароля. http://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length – boblapointe

+3

Это как указано в связанном вопросе - до 72 символов, но это не 'password_hash()' предел, но предел алгоритма. Алгоритм по умолчанию может быть изменен в будущем, поэтому может быть использовано количество значимых байтов. И это не очень важно, так как вы можете использовать более длинный пароль, просто не ожидайте, что хэш будет отличаться для двух паролей, которые отличаются только после этого символьного ограничения. –

ответ

11

Хорошо, давайте пройдем через это.

Функция имеет лимит длины пароля. Как и все строки в PHP, он ограничен 2^31-1 байтами.

Чтобы быть понятным, PHP не имеет никакого отношения к чему-либо большему, чем это (по крайней мере, сегодня).

Таким образом, сама функция ограничена. Но как насчет основных криптоалгоритмов.

BCrypt is ограничен обработкой первых 72 символов пароля. Однако это обычно не проблема as explained in this answer.

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

+0

Ограничение на 72 символа на пароле/парольной фразе, безусловно, является проблемой, даже больше, когда она молча информирует вас о том, что лишние символы просто игнорируются. –

0

Нельзя ограничивать длину функции password_hash.

+0

По крайней мере, не каждый, кто может нанести удар по набору текста. – Sammitch

+0

Ну да.Я бы предположил, что это может поразить пределы памяти или аналогичные. Но я не могу себе представить, что сама функция имеет ограничение длины строки. – Jite

1

Функция не имеет никакого предела, вам просто нужно сохранить свой memory_limit в виду, это должно быть все.

Edit: Вы должны ограничить длину пароля, в противном случае это может привести к замедлению работы сервера (в зависимости от алгоритма)
см Джанго: https://www.djangoproject.com/weblog/2013/sep/15/security/

Edit 2: уточнить: не должен быть пределом 14-20 символов, оно должно быть 4 КБ или более.

+1

Неверно! Ограничение длины пароля - это не очень хорошая идея. Это не замедляет работу сервера и уменьшает энтропию ваших паролей. –

+0

@ MadaraUchiha хорошо, вы действительно думаете, что это плохая идея установить предел примерно в 4 КБ (см. Ссылку в ответе)? Или вы действительно думаете, что кто-нибудь будет использовать пароль длиной 4 КБ? – bwoebi

+0

@bwoebi: Я не думаю, что в вашей системе должен быть жесткий предел. Кроме того, blowfish отключит ваш пароль после нескольких символов. Все зависит от вашего алго. –

2

password_hash сам не имеет предела длины.

Иглобрюхие, однако

имеет 64-битный размер блока и переменную длину ключа с 32 бит до 448 бит. Это 16-раундовый шифр Фейстеля и использует большие ключевые S-боксы. В структуре он похож на CAST-128, который использует фиксированные S-боксы. (Wikipedia)

Это означает эффективный предел 56 символов при использовании CRYPT_BLOWFISH в качестве шифра (который по умолчанию).

Смежные вопросы