Функция crypt() в PHP
Определение и использование
Функция crypt() возвращает строку, зашифрованную с использованием алгоритмов DES, Blowfish или MD5.
Поведение функции varies в зависимости от операционной системы, некоторые операционные системы поддерживают более одного типа алгоритмов. При установке PHP проверяет, какие алгоритмы доступны и какие из них используются.
Конкретный алгоритм зависит от формата и длины параметра соли. Соль может сделать шифрование более безопасным, увеличив количество строк, генерируемых определенной строкой для определенного метода шифрования.
Здесь есть некоторые константы, используемые вместе с функцией crypt(). Значения этих констант устанавливаются PHP при установке.
Константы:
[CRYPT_SALT_LENGTH] | Удаленная длина шифрования. Используется стандартное шифрование DES, длина 2. |
[CRYPT_STD_DES] | Хэш-функция на основе стандартного алгоритма DES использует два символа из набора символов "./0-9A-Za-z" в качестве соли. Использование недопустимых символов в соли приведет к сбою crypt(). |
[CRYPT_EXT_DES] | Расширенная хэш-функция на основе алгоритма DES. Солью является строка из 9 символов, состоящая из одного подчеркивания, за которым следуют 4 байта количества итераций и 4 байта соли. Они кодируются в printable characters, каждый символ из 6 бит, приоритет у символов с минимальным количеством эффективных бит. Символы от 0 до 63 кодируются как "./0-9A-Za-z". Использование недопустимых символов в соли приведет к сбою crypt(). |
[CRYPT_MD5] | хеширование MD5 использует 12-символьную строку соли, начинающуюся с $1$. |
[CRYPT_BLOWFISH] | алгоритм Blowfish использует соль в виде "$2a$", двухзначный параметр cost, "$" и 64-битной строки, состоящей из символов combinations из "./0-9A-Za-z". Использование символов за пределами этого диапазона приведет к тому, что crypt() вернет пустую строку. Двухзначный параметр cost является логарифмом количества циклов по основанию 2, его диапазон составляет от 04 до 31. Значения за пределами этого диапазона приведут к сбою crypt(). |
CRYPT_SHA256 | алгоритм SHA-256 использует 16-символьную строку соли, начинающуюся с $5$, для хеширования. Если строка соли начинается с "rounds=<N>$", числовое значение N будет использоваться для указания количества выполняемых хеширования циклов, что очень похоже на параметр cost алгоритма Blowfish. По умолчанию количество циклов составляет 5000, минимально 1000, максимально 999,999,999. Значения N за пределами этого диапазона будут преобразованы в ближайшее значение. |
CRYPT_SHA512 | алгоритм SHA-512 использует 16-символьную строку соли, начинающуюся с $6$, для хеширования. Если строка соли начинается с "rounds=<N>$", числовое значение N будет использоваться для указания количества выполняемых хеширования циклов, что очень похоже на параметр cost алгоритма Blowfish. По умолчанию количество циклов составляет 5000, минимально 1000, максимально 999,999,999. Значения N за пределами этого диапазона будут преобразованы в ближайшее значение. |
на системах, поддерживающих различные алгоритмы, если поддерживаются указанные константы, установите их в "1", в противном случае установите в "0".
备注:нет соответствующей функции для дешифрования. Функция crypt() использует однонаправленный алгоритм.
синтаксис
crypt(строка,соль)
параметры | описание |
---|---|
строка | обязателен. Определяет строку, которую нужно закодировать. |
соль | опционально. Используется для的增加 количества закодированных символов, чтобы сделать кодирование более безопасным. Если параметр соли не предоставлен, PHP будет генерировать случайную соль каждый раз при вызове функции. |
технические детали
возвратное значение: | возвращает зашифрованную строку или строку короче 13 символов, чтобы отличить её от соли в случае ошибки. |
версия PHP: | 4+ |
журнал обновлений
Версия | Описание |
---|---|
5.3.2 | На основе реализации Ulrich Drepper, добавлена поддержка crypt с алгоритмами SHA-256 и SHA-512. |
5.3.2 | Исправлена проблема с алгоритмом Blowfish, возникающая из-за незаконного цикла, которая возвращает строку "неудача" ("*0" или "*1"), вместо того чтобы перейти на DES алгоритм. |
5.3.0 | PHP теперь включает в себя свою реализацию MD5 Crypt, включая стандартный DES алгоритм, расширенный DES алгоритм и Blowfish алгоритм. Если в системе отсутствует соответствующая реализация, PHP будет использовать свою собственную. |
Пример
Пример 1
В данном примере мы будем тестировать различные алгоритмы:
<?php // Двухсимвольный salt if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES not supported.\n<br>"; } // 4 символа salt if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Extended DES not supported.\n<br>"; } // Начинающийся с $1$ 12 символов if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 not supported.\n<br>"; } // Начинающийся с $2a$ Salt. Двузначный параметр cost: 09. 22 символа if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES not supported.\n<br>"; } // Соль начинается с $5$, длина 16 символов. По умолчанию количество итераций 5000. if (CRYPT_SHA256 == 1) { echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; else { echo "SHA-256 not supported.\n<br>"; } // Соль начинается с $5$, длина 16 символов. По умолчанию количество итераций 5000. if (CRYPT_SHA512 == 1) { echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$'); } else { echo "SHA-512 not supported."; } ?>
Вывод кода выше (в зависимости от операционной системы):
Standard DES: stqAdD7zlbByI Extended DES: _S4..someQXidlBpTUu6 MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w. Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9 SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/ oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.