Какова длина вывода PHP crypt()? [закрыто]


Какова длина вывода PHP crypt()?

md5() выходные данные составляют 128 бит и выдают строку с 32 символами, поэтому в базе данных вы помещаете ее в столбец char(32), как насчет crypt()?

Author: hakre, 2012-11-05

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 связанные с этим вопросы:

 20
Author: hakre, 2017-05-23 11:52:35

Возвращает хэшированную строку или строку, которая короче 13 символов и гарантированно отличается от соли при сбое.

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

Некоторые операционные системы поддерживают более одного типа хэша. На самом деле, иногда стандартный алгоритм на основе DES заменяется алгоритмом на основе MD5 . Тип хэша - это вызванный аргументом о соли. До 5.3, PHP определил бы доступные алгоритмы во время установки на основе системного криптографа(). Если соль не указана, PHP автоматически сгенерирует либо стандартную двухсимвольную соль (DES), либо двенадцатизначную (MD5), в зависимости от доступности MD5 crypt(). PHP устанавливает константу с именем CRYPT_SALT_LENGTH, которая указывает самую длинную допустимую соль, разрешенную доступными хэшами.

Подробнее: http://php.net/crypt

 0
Author: RezaSh, 2012-11-04 21:19:09

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

 0
Author: s1lence, 2012-11-04 21:19:29

Crypt() полагается на доступные методы шифрования. Наиболее распространенным методом для PHP является MD5, который всегда возвращает 32 символа. Другие методы, такие как DES и Blowfish, возвращают строки переменной длины.

Вам нужно знать, какой метод использует функция crypt() на вашем сервере.

 0
Author: Jay S., 2012-11-04 21:20:18