mcrypt_encrypt

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mcrypt_encryptШифрует текст с заданными параметрами

Внимание

Эта функция объявлена УСТАРЕВШЕЙ, начиная с PHP 7.1.0 и была УДАЛЕНА в версии PHP 7.2.0. Использовать эту функцию крайне не рекомендуется.

Описание

mcrypt_encrypt ( string $cipher , string $key , string $data , string $mode , string $iv = ? ) : string|false

Шифрует данные.

Список параметров

cipher

Одна из констант MCRYPT_ciphername или название алгоритма в виде строки.

key

Ключ, с которым будут шифроваться данные. Если длина ключа не соответствует требованием шифра, то будет возвращено false и выдано предупреждение.

data

Данные, которые будут зашифрованы с помощью шифра cipher и режима mode. Если размер данных не кратен размеру блока, то они будут дополнены символами '\0'.

Размер возвращаемого текста может быть больше размера исходных данных data.

mode

Одна из констант MCRYPT_MODE_modename, либо одна из следующих строк: "ecb", "cbc", "cfb", "ofb", "nofb" и "stream".

iv

Используется для инициализации в режимах CBC, CFB, OFB, а также в некоторых алгоритмах в режиме STREAM. Если переданный IV размер не поддерживается режимом сцепления или IV не был передан, а режим сцепления его требует, функция сгенерирует предупреждение об ошибке и вернет false.

Возвращаемые значения

Возвращает строку с зашифрованными данными или false в случае возникновения ошибки.

Список изменений

Версия Описание
5.6.0 Некорректные размеры ключа key и инициализирующего вектора iv более не принимаются. Теперь в случае некорректных входных параметров Функция mcrypt_encrypt() будет возвращать false и вызывать предупреждение. Ранее в подобном случае ключ и инициализирующий вектор дополнялись до необходимого размера с помощью символов '\0'.

Примеры

Пример #1 Пример использования mcrypt_encrypt()

<?php
    
# --- ШИФРОВАНИЕ ---

    # ключ должен представлять собой случайную бинарную строку.
    # Для преобразовангия строки в ключ используйте scrypt, bcrypt или PBKDF2
    # Ключ задается в виде строки шестнадцатеричных чисел
    
$key pack('H*'"bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
    
    
# Показываем длину ключа. 
    # Длина ключа должна быть 16, 24 или 32 байт для AES-128, 192 и 256 соответственно
    
$key_size =  strlen($key);
    echo 
"Длина ключа: " $key_size "\n";
    
    
$plaintext "This string was AES-256 / CBC / ZeroBytePadding encrypted.";

    
# Создаем случайный инициализирующий вектор используя режим CBC
    
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_CBC);
    
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
    
    
# Создаем шифрованный текст совместимыс с AES (размер блока = 128)
    # Подходит только для строк не заканчивающихся на 00h
    # (потому как это символ дополнения по умолчанию)
    
$ciphertext mcrypt_encrypt(MCRYPT_RIJNDAEL_128$key,
                                 
$plaintextMCRYPT_MODE_CBC$iv);

    
# Добавляем инициализирующий вектор в начало, чтобы он был доступен для расшифровки
    
$ciphertext $iv $ciphertext;
    
    
# перекодируем зашифрованный текст в base64
    
$ciphertext_base64 base64_encode($ciphertext);

    echo  
$ciphertext_base64 "\n";

    
# === ВНИМАНИЕ ===

    # Результирующий шифрованный текст не имеет целостности или аутентичности и не
    # защищен от атак padding oracle.
    
    # --- ДЕШИФРОВКА ---
    
    
$ciphertext_dec base64_decode($ciphertext_base64);
    
    
# Извлекаем инициализирующий вектор. Длина вектора ($iv_size) должна совпадать 
    # с тем, что возвращает функция mcrypt_get_iv_size()
    
$iv_dec substr($ciphertext_dec0$iv_size);
    
    
# Извлекаем зашифрованный текст
    
$ciphertext_dec substr($ciphertext_dec$iv_size);

    
# Отбрасываем завершающие символы 00h
    
$plaintext_dec mcrypt_decrypt(MCRYPT_RIJNDAEL_128$key,
                                    
$ciphertext_decMCRYPT_MODE_CBC$iv_dec);
    
    echo  
$plaintext_dec "\n";
?>

Результат выполнения данного примера:

Длина ключа: 32
ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU=
This string was AES-256 / CBC / ZeroBytePadding encrypted.

Смотрите также

  • mcrypt_decrypt() - Расшифровывает данные с заданными параметрами
  • mcrypt_module_open() - Открывает модуль шифрования с использованием указанных алгоритма и режима