(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mdecrypt_generic — Дешифровка данных
Функция УСТАРЕЛА с PHP 7.1.0, а в PHP 7.2.0 функцию УДАЛИЛИ. Пользоваться функцией настоятельно не рекомендуют.
Функция дешифрует данные. Обратите внимание, что длина возвращаемой строки по факту может быть больше длины оригинальной нешифрованной строки. Это происходит от того, что данные могут дополняться.
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().