2015-06-22 2 views
2

Я использую следующее: шифрует пароль перед его хранением в MySQL db.PHP/MySQL: какой тип данных выбрать для зашифрованных паролей (bcrypt, не более 100 символов)

В настоящее время я ограничил пароль длиной до макс. 20 символов, так как я не был уверен, что более длинные пароли могут вызвать проблемы из-за выхода шифрования.

В PHP Я использую следующие для шифрования:

$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT); 

что пароль trimmend на стороне клиента перед тем, как передается дальше.

Может кто-то скажите мне, еслиCHAR(60)достаточно, чтобы покрыть для паролей с длиной до 100 символов (цифры, заглавные и строчные буквы, специальные символы)?

Также существует общий макс. лимит символов, который должен быть установлен для паролей - без увеличения уязвимости? Я узнал, что некоторые люди определенно хотят использовать более длинные пароли, такие как короткие фразы и т. Д.

+2

Руководство там ответы http://php.net/manual/en/function.password-hash.php –

+0

Благодарности. Поэтому, основываясь на этом, я должен изменить его на CHAR (255), а затем разрешить пароли до 100 символов, это правильно? – TaneMahuta

+2

Нет, это не так .... php docs говорят использовать varchar (255), вы не хотите использовать char для чего-то подобного –

ответ

2

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

В настоящее время функция вычисляет хэширование BCrypt, его выход всегда будет 60 символов. Поэтому поле базы данных char(60) будет достаточным для хранения хэшей.

Используемый алгоритм хэширования может измениться в будущем, хотя, чтобы справиться с будущими угрозами. Вот почему руководство рекомендует использовать параметр PASSWORD_DEFAULT и поле varchar(255). Это дает функции необходимое пространство для будущего.

$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT); 
Смежные вопросы