Учебник РНР
НазадВперёд

crypt

(PHP 3, PHP 4)

crypt - одностороннее шифрование строк (хэширование).

Описание

string crypt (string str [, string salt])

crypt() возвратит шифрованную строку с использованием стандартного алгоритма шифрования Unix на базе DES или альтернативных алгоритмов, которые могут быть доступны в данной системе. Аргументами является шифруемая строка и необязательная строка salt как база шифрования. См. Unix man-страницу для вашей crypt-функции.

Если аргумент salt не предоставлен, он будет произвольно сгенерирован PHP.

Некоторые ОС поддерживают более одного типа шифрования. На практике иногда стандартное DES-шифрование заменяется алгоритмом на базе MD5. Тип шифрования переключается аргументом salt. Во время установки PHP определяет возможности crypt-функции и будет принимать salts для других типов шифрования. Если salt не предоставлен, PHP будет автоматически генерировать стандартный двухсимвольный salt по умолчанию, если только тип шифрования по умолчанию в системе не MD5 - тогда генерируется произвольный MD5-совместимый salt. PHP устанавливает константу CRYPT_SALT_LENGTH, которая сообщает вам, применяется ли для вашей системы обычный двухсимвольный salt или более длинный 12-символьный salt.

Если вы используете предоставляемый salt, вы должны убедиться, что этот salt генерируется один раз. Если вы вызываете эту функцию рекурсивно, это может повлиять и на вид, и на безопасность.

Стандартная шифровка crypt() на базе DES возвращает salt как первые два символа вывода. Она также использует лишь первые восемь символов из str, поэтому строки большей длины, начинающиеся теми же самыми восемью символами, сгенерируют тот же результат (когда используется тот же salt).

В системах, где функция crypt() поддерживает несколько типов шифрования, следующие константы устанавливаются в значения 0 или 1, в зависимости от того, доступен ли данный тип:

  • CRYPT_STD_DES - стандартное шифрование на базе DES с двухсимвольным salt

  • CRYPT_EXT_DES - расширенное шифрование на базе DES с девятисимвольным salt

  • CRYPT_MD5 - шифрование MD5 с 12-символьным salt, начиная с $1$

  • CRYPT_BLOWFISH - Blowfish-шифрование с 16-символьным salt, начиная с $2$

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

Пример 1. crypt()
<?php
$password = crypt("My1sTpassword"); # сгенерируем salt

# Вы должны передавать все результаты работы crypt() как salt для сравнения
# пароля, чтобы исключить проблемы при использовании разных алгоритмов шифрования. (Как
# сказано выше, стандартное хэширование пароля на базе DES использует 2-символьный salt,
# но хэширование на базе MD5 использует 12-символьный.)
if (crypt($user_input,$password) == $password) {
   echo "Password verified!";
}
?>

См. также md5() и расширение Mcrypt.


Назад ОглавлениеВперёд
crc32Вверх echo