PHPerKaigi 2025

mcrypt_decrypt

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

mcrypt_decryptРасшифровывает данные с заданными параметрами

Внимание

Функция УСТАРЕЛА с PHP 7.1.0, а в PHP 7.2.0 функцию УДАЛИЛИ. Пользоваться функцией настоятельно не рекомендуют.

Описание

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

Расшифровывает data и возвращает полученное значение.

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

cipher

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

key

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

data

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

mode

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

iv

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

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

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

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

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

Добавить

Примечания пользователей 1 note

up
32
eddiec at stararcher dot com
19 years ago
It appears that mcrypt_decrypt pads the *RETURN STRING* with nulls ('\0') to fill out to n * blocksize. For old C-programmers, like myself, it is easy to believe the string ends at the first null. In PHP it does not:

strlen("abc\0\0") returns 5 and *NOT* 3
strcmp("abc", "abc\0\0") returns -2 and *NOT* 0

I learned this lesson painfully when I passed a string returned from mycrypt_decrypt into a NuSoap message, which happily passed the nulls along to the receiver, who couldn't figure out what I was talking about.

My solution was:
<?php
$retval
= mcrypt_decrypt( ...etc ...);
$retval = rtrim($retval, "\0"); // trim ONLY the nulls at the END
?>
To Top