PHP - функция crypt()
❮ Справочник по строкам PHP
Определение и использование
Функция crypt() возвращает хешированную строку с использованием алгоритмов DES, Blowfish или MD5.
Эта функция ведет себя по-разному в разных операционных системах. PHP проверяет, какие алгоритмы доступны и какие алгоритмы использовать, когда он установлен.
Параметр соли является необязательным. Однако crypt() создает слабый пароль без соли. Обязательно укажите достаточно сильную соль для большей безопасности.
Есть некоторые константы, которые используются вместе с функцией crypt(). Значение этих констант устанавливается PHP при его установке.
Константы:
- [CRYPT_STD_DES] — Стандартный хеш на основе DES с солью из двух символов из алфавита «./0-9A-Za-z». Использование недопустимых символов в соли приведет к сбою этой функции.
- [CRYPT_EXT_DES] — расширенный хэш на основе DES с девятисимвольной солью, состоящей из подчеркивания, за которым следуют 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" . Использование символов вне алфавита приведет к тому, что эта функция вернет строку нулевой длины. Параметр "$" представляет собой логарифм по основанию 2 числа итераций для базового алгоритма хэширования Blowfish и должен находиться в диапазоне 04-31. Значения вне этого диапазона приведут к сбою функции.
- [CRYPT_SHA_256] — хеш SHA-256 с солью из 16 символов, начинающейся с $5$. Если солт-строка начинается с «rounds=<N>$», числовое значение N используется для указания того, сколько раз должен выполняться цикл хеширования, подобно параметру стоимости в Blowfish. Количество раундов по умолчанию 5000, есть минимум 1000 и максимум 999 999 999. Любой выбор N за пределами этого диапазона будет усечен до ближайшего предела.
- [CRYPT_SHA_512] — хеш SHA-512 с солью из 16 символов, начинающейся с $6$. Если солт-строка начинается с «rounds=<N>$», числовое значение N используется для указания того, сколько раз должен выполняться цикл хэширования, подобно параметру стоимости в Blowfish. Количество раундов по умолчанию 5000, есть минимум 1000 и максимум 999 999 999. Любой выбор N за пределами этого диапазона будет усечен до ближайшего предела.
В системах, где эта функция поддерживает несколько алгоритмов, указанные выше константы устанавливаются равными «1», если они поддерживаются, и «0» в противном случае.
Примечание. Функция расшифровки отсутствует. Функция crypt() использует односторонний алгоритм.
Синтаксис
crypt(str,salt)
Значения параметров
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Технические детали
Возвращаемое значение: | Возвращает закодированную строку или строку короче 13 символов, которая гарантированно отличается от соли в случае ошибки. |
---|---|
Версия PHP: | 4+ |
Список изменений: | PHP 5.6.0 — показывает предупреждение безопасности E_NOTICE, если соль не указана . PHP 5.3.7 - Добавлены режимы $2x$ и $2y$ Blowfish. PHP 5.3.2 — добавлены SHA-256 и SHA-512. Исправлено поведение Blowfish при недопустимых раундах, возвращающее строку «сбой» («*0» или «*1») вместо возврата к DES. PHP 5.3.0 - PHP теперь содержит собственную реализацию алгоритмов шифрования MD5, стандартного DES, расширенного DES и Blowfish и будет использовать ее, если система не поддерживает один или несколько алгоритмов. |
Дополнительные примеры
Пример
В этом примере мы протестируем разные алгоритмы:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 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.
❮ Справочник по строкам PHP