Эта функция дешифрует данные. Обратите внимание, что длина возвращаемой
строки может оказаться больше, чем длина нешифрованной, из-за заполнения данными.
Пример 1. mdecrypt_generic()
<?php
/* Данные */
$key = ’this is a very long key, even too long for the cipher’;
$plain_text = ’very important data’;
/* Открывает модуль и создаёт IV */
$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 "ok
";
} else {
echo "error
";
}
?>
В этом примере показано, как проверить, являются ли данные перед шифровкой
теми же, что и после дешифровки. очень важно реинициализировать буфер шифрования функцией
mcrypt_generic_init(), прежде чем вы попытаетесь дешифровать данные.
Дескриптор дешифровки должен всегда инициализироваться функцией
mcrypt_generic_init() с ключом и IV до вызова этой функции. После выполнения шифрования вы должны
освободить буферы шифрования вызовом mcrypt_generic_deinit().
См. пример в mcrypt_module_open().