PHP crypt()Функции
Справочное руководство по строкам PHP
Определение и использование
Функция crypt() возвращает строку, зашифрованную с использованием алгоритмов DES, Blowfish или MD5.
Поведение этой функции различается в разных операционных системах, и некоторые операционные системы поддерживают более одного типа алгоритма. Во время установки PHP проверяет, какие алгоритмы доступны и какой алгоритм использовать.
Точный алгоритм зависит от формата и длины параметра salt. Соль может сделать шифрование более безопасным, увеличивая количество строк, генерируемых конкретной строкой в сочетании с конкретным методом шифрования.
Ниже приведены некоторые константы, которые используются с функцией crypt(). Значения этих констант устанавливаются PHP во время установки.
Константы:
- [CRYPT_SALT_LENGTH] - Длина шифрования по умолчанию. При стандартном шифровании DES длина составляет 2.
- [CRYPT_STD_DES] - Стандартное шифрование на основе DES имеет 2-символьную соль из алфавита "./0-9A-Za-z". Использование недопустимых символов в соли приведёт к сбою функции.
- [CRYPT_EXT_DES] - Расширенное шифрование на основе DES имеет 9-символьную соль, состоящую из 1 символа подчёркивания, за которым следуют 4 байта счётчика итераций и 4 байта соли. Они кодируются как печатные символы, по 6 бит на символ, наименее значимый символ идёт первым. Значения от 0 до 63 кодируются как "./0-9A-Za-z". Использование недопустимых символов в соли приведёт к сбою функции.
- [CRYPT_MD5] - Шифрование MD5 имеет 12-символьную соль, начинающуюся с $1$.
- [CRYPT_BLOWFISH] - Шифрование Blowfish имеет соль, начинающуюся с $2a$, $2x$ или $2y$, двухзначный параметр стоимости "$", и 22 символа из алфавита "./0-9A-Za-z". Использование символов вне алфавита приведёт к тому, что функция вернёт строку длиной 0. Параметр "$" — это логарифм по основанию 2 от счётчика итераций для алгоритма хеширования на основе Blowfish, и он должен находиться в диапазоне 04-31. Значения вне этого диапазона приведут к сбою функции.
- [CRYPT_SHA_256] — шифрование SHA-256 имеет 16-символьную соль, начинающуюся с $5$.Если строка соли начинается с "rounds=<N>$", то числовое значение N используется для указания числа выполнений цикла хеширования, аналогично параметру cost в Blowfish. По умолчанию число раундов — 5000, минимум — 1000, максимум — 999,999,999. Любое значение N вне этого диапазона будет приведено к ближайшему граничному значению.
- [CRYPT_SHA_512] — шифрование SHA-512 имеет 16-символьную соль, начинающуюся с $6$.Если строка соли начинается с "rounds=<N>$", то числовое значение N используется для указания числа выполнений цикла хеширования, аналогично параметру cost в Blowfish. По умолчанию число раундов — 5000, минимум — 1000, максимум — 999,999,999. Любое значение N вне этого диапазона будет приведено к ближайшему граничному значению.
В системах, где эта функция поддерживает несколько алгоритмов, вышеуказанные константы устанавливаются в "1", если поддерживаются, иначе — в "0".
Примечания:Соответствующей функции расшифровки нет. Функция crypt() использует односторонний алгоритм.
Синтаксис
| Parameters | Описание |
|---|---|
| str | Обязательный. Указывает строку для кодирования. |
| salt | Необязательный. Строка, используемая для увеличения количества кодируемых символов, что делает кодирование более безопасным. Если параметр salt не указан, случайная соль генерируется при каждом вызове функции. |
Технические детали
| Возвращаемое значение: | Возвращает зашифрованную строку или, в случае неудачи, возвращает строку длиной менее 13 символов, которая гарантированно отличается от соли. |
|---|---|
| Версия PHP: | 4+ |
| Список изменений: | В PHP 5.3.7 были добавлены режимы Blowfish $2x$ и $2y$ для обработки потенциальных атак на старшие биты. В PHP 5.3.2 были добавлены константы SHA-256 и SHA-512. Начиная с PHP 5.3.2, Blowfish возвращает строку сбоя ("*0" или "*1") при недопустимом количестве раундов, а не выполняет откат к DES. Начиная с PHP 5.3.0, PHP включает собственную реализацию шифрования MD5, стандартную реализацию DES, расширенную реализацию DES и алгоритм Blowfish. Если система не поддерживает вышеуказанные алгоритмы, будет использоваться встроенная реализация алгоритмов PHP. |
Примеры
Пример 1
Пример 2
Использование htpasswd для шифрования crypt():
Пример 1
В этом примере мы используем разные типы хешей:
Приведённый выше код выводит следующее (в зависимости от операционной системы):
Standard DES: rl.3StKT.4T8M Extended DES: _J9..rasmBYk8r9AiWNc MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0 Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6 SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Справочное руководство по строкам PHP Другие расширения