Какова длина вывода PHP crypt()? [закрыто]
Какова длина вывода PHP crypt()
?
md5()
выходные данные составляют 128 бит и выдают строку с 32 символами, поэтому в базе данных вы помещаете ее в столбец char(32)
, как насчет crypt()
?
4 answers
Примечание: Это полностью ограничено, чтобы задать вопрос таким образом, см. http://php.net/crypt
Еще некоторые подробности:
- При успешном выполнении длина возвращаемой строки может варьироваться от 13 до 123.
- Длина вывода зависит от используемого алгоритма хэширования. Это остается неопределенным в вашем вопросе.
- Длина вывода зависит от соли, переданной функции. Это остается неопределенным в вашем вопрос.
-
crypt
всегда возвращает хэшированную строку или строку, которая короче 13 символов и гарантированно отличается от соли при сбое.
Примеры:
Давайте начнем с простого вызова crypt
и допустимой двухсимвольной соли для стандартного хэша на основе DES:
13 :: 2 (salt) + 11 (hash - 64 bits, base 64)
Если вы используете PHP crypt
и конкретно MD5 (здесь лучше назвать: md5crypt, MD5(Unix), FreeBSD MD5, Cisco-IOS MD5; Режим Hashcat 500) и пустую соль, выходная длина составляет:
26 :: 3 (`$1$`) + 0 (empty salt) + 1 (`$`) + 22 (hash - 128 bits, base 64)
Если в системе, где PHP crypt
по умолчанию использует указанный MD5, и это называется без указания соли, crypt
сгенерирует соль. Эта соль обычно состоит из 8 символов. Тогда выходная длина будет равна:
34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash)
В этом случае столбец таблицы базы данных char(32)
либо сообщит об ошибке при вставке, либо усечет - в зависимости от того, какой сервер базы данных вы используете.
Но пример MD5 спорный, я выбрал его, потому что он у вас есть в вашем вопрос, но вы не должны использовать MD5 с crypt
(см.: Шифратор паролей Md5crypt больше не считается автором безопасным).
Вместо этого давайте рассмотрим хеширование Blowfish (CRYPT_BLOWFISH
). Он имеет двузначный параметр стоимости и всегда имеет длину соли 22 (если задана более короткая соль, она дополняется $
s):
60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)
Для крипто-хэш-алгоритма Blowfish (bcrypt, OpenBSD Blowfish; Режим Hashcat 3200) существует фиксированная длина 60 затем.
Как вы можете видеть, длина вывода зависит от используемого хэш-алгоритма, длины соли и даже некоторых специфических параметров хэша, таких как стоимость .
Если вы, например, выберете SHA512 с 999 999 999 раундами и солью длиной 16 байт, выходная длина будет равна:
123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)
Этот пример, возможно, немного экстремален, просто чтобы показать картину.
Другие crypt
связанные с этим вопросы:
Возвращает хэшированную строку или строку, которая короче 13 символов и гарантированно отличается от соли при сбое.
Crypt() вернет хэшированную строку, используя стандартный алгоритм Unix на основе DES или альтернативные алгоритмы, которые могут быть доступны в системе.
Некоторые операционные системы поддерживают более одного типа хэша. На самом деле, иногда стандартный алгоритм на основе DES заменяется алгоритмом на основе MD5 . Тип хэша - это вызванный аргументом о соли. До 5.3, PHP определил бы доступные алгоритмы во время установки на основе системного криптографа(). Если соль не указана, PHP автоматически сгенерирует либо стандартную двухсимвольную соль (DES), либо двенадцатизначную (MD5), в зависимости от доступности MD5 crypt(). PHP устанавливает константу с именем CRYPT_SALT_LENGTH, которая указывает самую длинную допустимую соль, разрешенную доступными хэшами.
Подробнее: http://php.net/crypt
Crypt() полагается на доступные методы шифрования. Наиболее распространенным методом для PHP является MD5, который всегда возвращает 32 символа. Другие методы, такие как DES и Blowfish, возвращают строки переменной длины.
Вам нужно знать, какой метод использует функция crypt() на вашем сервере.