PHPerKaigi 2025

mcrypt_decrypt

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

mcrypt_decryptDecrypts crypttext with given parameters

Увага

Ця функція ЗАСТАРІЛА, починаючи з PHP 7.1.0, та ВИЛУЧЕНА в PHP 7.2.0. Вкрай не рекомендується на неї покладатися.

Опис

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

Decrypts the data and returns the unencrypted data.

Параметри

cipher

Одна з констант MCRYPT_ciphername або назва алгоритму у вигляді рядка.

key

The key with which the data was encrypted. If the provided key size is not supported by the cipher, the function will emit a warning and return false

data

The data that will be decrypted with the given cipher and mode. If the size of the data is not n * blocksize, the data will be padded with '\0'.

mode

Одна з констант MCRYPT_MODE_modename або один з рядків: "ecb", "cbc", "cfb", "ofb", "nofb", "stream".

iv

Використовується для ініціалізації в режимах CBC, CFB, OFB, а також в деяких алгоритмах у режимі STREAM. Якщо вказаний IV-розмір не підтримується в режимі ланцюга або IV взагалі не вказано, проте він необхідний для режиму ланцюга, функція видасть попередження та поверне false.

Значення, що повертаються

Returns the decrypted data as a string або false в разі помилки.

Прогляньте також

add a note

User Contributed Notes 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