Since the returned data seems to be still padded with extra characters, you can get *only* the original data that was encrypted by str_replace()'ing the \x0 characters.
<?php
$decryptedData = str_replace("\x0", '', $encryptedData);
?>
mcrypt_decrypt
(PHP 4 >= 4.0.2, PHP 5)
mcrypt_decrypt — 指定したパラメータで暗号化されたテキストを復号する
説明
string mcrypt_decrypt
( string $cipher
, string $key
, string $data
, string $mode
[, string $iv
] )
data を復号し、復号されたデータを返します。
パラメータ
- cipher
-
cipher には、アルゴリズム名を表す定数 MCRYPT_暗号名 の一つを文字列で指定します。
- key
-
key は、データを暗号化する際のキーです。 必要なキー長よりも短い場合には、'\0' で埋められます。
- data
-
data は、指定した暗号およびモードで復号 されます。データの大きさが n * blocksize でない場合、データは、 '\0' で埋められます。
- mode
-
mode には、"ecb", "cbc", "cfb", "ofb", "nofb" ,"stream" のどれかを用いて定数 MCRYPT_MODE_モード名を 指定します。
- iv
-
パラメータ IV は、CBC, CFB, OFB モードおよび STREAM モードのいくつかのアルゴリズムの初期化の際に使用されます。 アルゴリズムで必要とする IV を指定しない場合、この関数は警告を発生し、 全てのバイトを '\0' に設定した IV を使用します。
返り値
復号されたデータを文字列で返します。
mcrypt_decrypt
smp_info at yahoo dot com
11-Oct-2007 08:27
11-Oct-2007 08:27
eddiec at stararcher dot com
14-Jul-2005 03:26
14-Jul-2005 03:26
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:
<?
$retval = mcrypt_decrypt( ...etc ...);
$retval = rtrim($retval, "\0"); // trim ONLY the nulls at the END
?>
kooktroop at gmail dot com
09-Jul-2004 12:13
09-Jul-2004 12:13
Following on from the mcrypt_encrypt() example:
<?php
$text = "boggles the inivisble monkey will rule the world";
$key = "This is a very secret key";
$iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
echo strlen($text) . "<br>";
$enc = mcrypt_encrypt(MCRYPT_XTEA, $key, $text, MCRYPT_MODE_ECB, $iv);
echo strlen($enc) . "<br>";
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "This is a very secret key";
$text = "Meet me at 11 o'clock behind the monument.";
echo strlen($text) . "<br>";
$crypttext = mcrypt_decrypt(MCRYPT_XTEA, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
?>
