(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mdecrypt_generic — Дешифровка данных
Эта функция объявлена УСТАРЕВШЕЙ, начиная с PHP 7.1.0. Использовать эту функции крайне не рекомендуется.
$td
, string $data
) : stringЭта функция дешифрует данные. Обратите внимание, что длина возвращаемой строки по факту может быть больше длины оригинальной нешифрованной строки. Это происходит от того, что данные могут дополняться.
td
Дескриптор шифрования, возвращаемый mcrypt_module_open()
data
Зашифрованные данные.
Пример #1 Пример использования mdecrypt_generic()
<?php
/* Данные */
$key = 'Это очень длинный ключ. Сильно больше, чем нужен шифру.';
$plain_text = 'очень важные данные';
/* Открываем модуль и создаем инициализирующий вектор */
$td = mcrypt_module_open('des', '', 'ecb', '');
$key = substr($key, 0, mcrypt_enc_get_key_size($td));
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
/* Инициализируем обработчик шифрования */
if (mcrypt_generic_init($td, $key, $iv) != -1) {
/* Шифруем данные */
$c_t = mcrypt_generic($td, $plain_text);
mcrypt_generic_deinit($td);
/* Переинициализируем буферы для дешифровки */
mcrypt_generic_init($td, $key, $iv);
$p_t = mdecrypt_generic($td, $c_t);
/* Убираем мусор */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
if (strncmp($p_t, $plain_text, strlen($plain_text)) == 0) {
echo "ок\n";
} else {
echo "ошибка\n";
}
?>
Пример выше показывает как проверить, что данные до шифрования совпадают с данными после дешифрования. Крайне важно переинициализировать буферы шифрования с помощью mcrypt_generic_init() перед дешифровкой данных.
Обработчик дешифрования всегда должен инициализироваться с помощью mcrypt_generic_init() с ключем и инициализирующим вектором перед вызовом функции. Как только шифрование завершено, необходимо освободить буферы шифрования путем вызова функции mcrypt_generic_deinit(). Смотрите пример в описании функции mcrypt_module_open().