Дешифровка данных

# mdecrypt_generic

(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 функцию УДАЛИЛИ. Полагаться на функцию настоятельно не рекомендуют.

### Описание

function mdecrypt_generic(resource `$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().

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

- mcrypt_generic() - Функция шифрует данные
- mcrypt_generic_init() - Функция инициализирует все буферы, необходимые для шифрования
- mcrypt_generic_deinit() - Эта функция деинициализирует модуль шифрования

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open