我想知道如何在perl和php中返回相同的3DES encription值。 PHP代碼如下:在php和perl中返回值相同3DES CBC
$bytes = array(0,0,0,0,0,0,0,0);
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, base64_decode('Mk9m98IfEblmPfrpsawt7BmxObt98Jev'), '0000001920', MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
結果是: 「A/VCTXA6q/X/emW0zzlSDg ==」
Perl代碼是:
use Crypt::CBC;
$cipher = Crypt::CBC->new( -key => decode_base64('Mk9m98IfEblmPfrpsawt7BmxObt98Jev'),
-cipher => 'DES_EDE3',
-iv => pack("H*","0000000000000000"),
-literal_key => 1,
-header => 'none'
);
$ciphertext = $cipher->encrypt("0000001920");
print encode_base64($ciphertext, '');
結果是:「 A/VCTXA6q/y9g7ypgqlWIg ==「
結果非常相似,我在我的Perl代碼中做錯了什麼?
請注意,對於任何可能包含NUL的字符串(即幾乎任何「二進制」文件),PHP的填充方法都是不安全的。 – ikegami
這是有趣的@ikegami!謝謝(你的)信息 –