(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 функцию УДАЛИЛИ. Полагаться на функцию настоятельно не рекомендуют.
$cipher,$key,$data,$mode,$iv = ?
Расшифровывает data и возвращает полученное значение.
cipherMCRYPT_ciphername или название алгоритма в виде строки.
keyfalse
datacipher и режима mode.
Если размер данных не кратен размеру блока, то они будут дополнены символами
'0円'.
modeMCRYPT_MODE_modename, либо одна из следующих строк: "ecb", "cbc", "cfb", "ofb", "nofb" и "stream".
ivfalse .
Возвращает строку с расшифрованными данными или false , если возникла ошибка.
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("abc0円0円") returns 5 and *NOT* 3
strcmp("abc", "abc0円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
?>