mcrypt_decrypt
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
mcrypt_decrypt — Decrypts crypttext with given parameters
Описание
$cipher
, string $key
, string $data
, string $mode
[, string $iv
] )
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
andmode
. 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
в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.6.0 |
Invalid key and iv sizes
are no longer accepted. mcrypt_decrypt() will now throw
a warning and return FALSE if the inputs are invalid. Previously keys and
IVs were padded with '\0' bytes to the next valid size.
|
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Криптографические расширения
- Mcrypt
- mcrypt_cbc
- mcrypt_cfb
- mcrypt_create_iv
- mcrypt_decrypt
- mcrypt_ecb
- mcrypt_enc_get_algorithms_name
- mcrypt_enc_get_block_size
- mcrypt_enc_get_iv_size
- mcrypt_enc_get_key_size
- mcrypt_enc_get_modes_name
- mcrypt_enc_get_supported_key_sizes
- mcrypt_enc_is_block_algorithm_mode
- mcrypt_enc_is_block_algorithm
- mcrypt_enc_is_block_mode
- mcrypt_enc_self_test
- mcrypt_encrypt
- mcrypt_generic_deinit
- mcrypt_generic_end
- mcrypt_generic_init
- mcrypt_generic
- mcrypt_get_block_size
- mcrypt_get_cipher_name
- mcrypt_get_iv_size
- mcrypt_get_key_size
- mcrypt_list_algorithms
- mcrypt_list_modes
- mcrypt_module_close
- mcrypt_module_get_algo_block_size
- mcrypt_module_get_algo_key_size
- mcrypt_module_get_supported_key_sizes
- mcrypt_module_is_block_algorithm_mode
- mcrypt_module_is_block_algorithm
- mcrypt_module_is_block_mode
- mcrypt_module_open
- mcrypt_module_self_test
- mcrypt_ofb
- mdecrypt_generic
Коментарии
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
?>