Как узнать, какой алгоритм crypt () использует на вашем компьютере?

Я не уверен, какой алгоритм Crypt() использует при перемешивании. Я посмотрел на руководство PHP, но он просто говорит, что использует все, что доступно. Но как я узнаю, какой из них он использует, и если он использует, как сказать ему, какой из них использовать? В настоящее время я использую MAMP в качестве среды разработки, но я считаю, что должен быть способ узнать с помощью оператора в PHP.

1 ответов


вы указываете алгоритм как часть солевой строки. Например, начиная с a$ дает вам Blowfish шифр. Если машина не поддерживает алгоритм, который вы пытаетесь использовать, вы не получите значимых результатов. Вы можете попытаться заранее узнать, какие алгоритмы поддерживаются, проверив некоторые предопределенные константы, такие как CRYPT_BLOWFISH, хотя я заметил, что константы CRYPT_SHA256 и CRYPT_SHA512 не всегда определены, по крайней мере, на PHP 5.2. Начиная с PHP 5.3, PHP имеет свои собственные реализации алгоритмов, поэтому не имеет значения, что система доступна во время компиляции PHP, как это происходит в PHP 5.2 и ранее. Патч Suhosin для PHP 5.2 предположительно добавляет по крайней мере Blowfish, но его реализация не кажется совместимой с той, которая используется в PHP 5.3.

на PHP документы для crypt() функции предоставьте некоторую информацию о том, как использовать строку соли, чтобы указать, какой алгоритм использовать:

  • CRYPT_STD_DES-стандартный хэш на основе DES с двухсимвольной солью из алфавита "./ 0-9A-Za-z". Использование недопустимых символов в соли вызовет сбой crypt ().
  • CRYPT_EXT_DES-расширенный DES-based хэш. "Соль" - это 9-символьная строка, состоящая из символа подчеркивания затем следует 4 байта подсчета итераций и 4 байта соли. Это закодированы в виде печатаемых символов, 6 бит на символ, с меньшим значительное сначала характер. Значения от 0 до 63 кодируются как "./ 0-9A-Za-z". Использование недопустимых символов в соли вызовет crypt() потерпеть неудачу.
  • CRYPT_MD5-MD5 хэширование с двенадцатью символами соли начиная с $1$
  • CRYPT_BLOWFISH-хеширование Blowfish солью как следует: "$2a$", двухзначный параметр стоимости, " $ " и 22 цифры из алфавит." / 0-9A-Za-z". Использование символов вне этого диапазона в соль заставит crypt () вернуть нулевую длину строка. Пара параметр стоимости числа логарифм основания-2 отсчета итерации для базового алгоритмметра хэширования на основе Blowfish и должен быть в диапазон 04-31, значения за пределами этого диапазона вызовут сбой crypt ().
  • CRYPT_SHA256-SHA-256 хэш с шестнадцатью символами соли с префиксом с $5$. Если строка соли начинается с ' rounds=$', числовое значение значение N используется, чтобы указать, сколько раз цикл хеширования должна быть казненным, как и цена параметр на Иглобрюх. Неисполнение количество раундов равно 5000, минимум 1000 и максимум 999,999,999. Любое значение вне этого диапазона будет усечено до ближайшего предела.
  • CRYPT_SHA512-SHA-512 хэш с шестнадцатью соль символа с префиксом $6$. Если строка с солью начинается с 'rounds=$', числовое значение N используется, чтобы указать, сколько раз цикл хэширования должен быть выполнен, как и стоимость параметр на Иглобрюх. Этот по умолчанию количество раундов равно 5000, минимум 1000 и максимум 999,999,999. Любой выбор из N за пределами этого диапазона будет усечен до ближайшего предела.

так, чтобы указать, что вы хотите, строке пароль хэшируется с помощью алгоритма Blowfish с 2^10 итераций, вы могли бы использовать

crypt('password', 'a$XA86t7EJ0xD9OYEUbnTulT');

где строка начинается с XA86 - это соль.

наконец, если вы хотите больше примеров или просто хотите что-то, чтобы заботиться о всех этот бизнес совместимости паролей для вас, взгляните на phpass. Это общественное достояние и прекрасно работает в моем опыте. Он будет автоматически использовать" лучший " алгоритм в системе, если вы не укажете, что хотите хэш, совместимый с несколькими системами, и в этом случае (я думаю) он использует MD5.