Руководство по PHP
Пред. |  | След.

# crypt

(PHP 3, PHP 4, PHP 5)

crypt -- Необратимое шифрование (хэширование)

## Описание

string crypt ( string str [, string salt] )

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

Если аргумент `salt` не передан, он будет выбран случайным образом.

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

Если вы опускаете аргумент `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 будет сгенерирована автоматически
// Для проверки пароля в качестве salt следует передавать результат работы
// crypt() целиком во избежание проблем при использовании различных
// алгоритмов (как уже было отмечено выше, стандартный DES-алгоритм
// использует 2-символьную salt, а MD5 - 12-символьную.
if (crypt($user_input, $password) == $password) {
echo "Пароль верен !";
}
?>`

Пример 2. Использование crypt() с файлом .htpasswd

При создании пароля для использования в файле .htpasswd Apache, нужно использовать 2 первых символа пароля в качестве salt.

`<?php // пароль $password = 'mypassword'; // получение хэша $hash = crypt($password, substr($password, 0, 2)); ?>`

См. также описание функции md5() и модуля Mcrypt.

Пред. | Начало | След.
crc32 | Уровень выше | echo