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

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

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

Примечание. Полностью ограничено задавать вопрос таким образом, см. http://php.net/crypt

Еще несколько деталей:

  • При успехе длина возвращаемой строки может варьироваться от 13 до 123.
  • Длина вывода зависит от используемого алгоритма хеширования. Это остается неопределенным в вашем вопросе.
  • Выходная длина зависит от соли, передаваемой функции. Это остается неопределенным в вашем вопросе.
  • crypt всегда возвращает хешированную строку или строку, которая короче 13 символов и, как гарантируется, будет отличаться от отказа соли.

Примеры:

Давайте начнем с простого вызова crypt и действующей соли с двумя символами для стандартного хэша на основе DES:

  13 :: 2 (salt) + 11 (hash - 64 bits, base 64) 

Если вы используете криптографию PHP и, в частности, 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 по умолчанию установлена ​​на указанный MD5, и она называется не указанием соли, crypt будет генерировать соль. Эта соль обычно имеет длину 8 символов. Длина вывода:

  34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash) 

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

Но пример MD5 спорный, я выбрал его, потому что у вас есть это в вашем вопросе, но вы не должны использовать MD5 с crypt (см.: Скремблер Md5crypt Password больше не считается безопасным автором ).

Вместо этого взглянем на хеширование Blowfish ( CRYPT_BLOWFISH ). Он имеет двухзначный параметр стоимости и всегда имеет длину соли 22 (если дана более короткая соль, она дополняется $ s):

  60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash) 

Для хэш-алгоритма Blowfish crypt (bcrypt, OpenBSD Blowfish, Hashcat mode 3200) существует фиксированная длина 60.

Как вы можете видеть, длина вывода зависит от используемого хэш-алгоритма, длины соли и даже некоторых хэш-специфических параметров, таких как стоимость .

Если вы, например, выбираете SHA512 с 999 999 999 раундами и солью длиной 16 байт, длина вывода:

 123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash) 

Этот пример немного экстремален, возможно, просто чтобы показать картинку.


Другие вопросы, связанные с crypt :

  • Альтернатива склепу ()
  • Сравнение паролей с crypt () в PHP
  • Можете ли вы преобразовать вывод php crypt () в действительный MD5?

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

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

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

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

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

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

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