0

我有一个在计数器模式下用 AES 加密的字符串,它不是用 PHP 完成的,我不能用 mcrypt 来解码它:( 有一个按预期工作的类:http://www.movable-type.co。 uk/scripts/aes.html(见页面底部),但速度很慢,所以我想用 mcrypt 解密。

根据类decrypt方法我做了以下:

 $key = $_POST['key'];

 $length = strlen($key);
 if($length > 32)
   $key = substr($key, 0, 32);

 $cyphered = base64_decode($_POST['cyphered']);
 /// make initialization vector with first 8 bytes treated as integers
 $f8b = array_map('ord', str_split(substr($cyphered, 0, 8)));
 array_unshift($f8b, 'I8');
 $iv = call_user_func_array('pack', $f8b);

 print mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, substr($cyphered, 8), 'ctr', $iv);

结果是输出垃圾:(我不明白我做错了什么。有人可以说明一下这个问题吗?

4

1 回答 1

0

phpseclib 的纯 PHP AES 实现几乎是可移动类型的 AES 实现的 4 倍:

http://phpseclib.sourceforge.net/crypt/examples.html

那是 mcrypt 不可用的时候。当 mcrypt 可用时,它会使用它并且速度更快。

也就是说,如果你坚持使用 mcrypt……试试 MCRYPT_RIJNDAEL_128。MCRYPT_RIJNDAEL_256 的块大小为 256 位,适用于 Rijndael(Rijndael 的块大小可变)但不适用于 AES。

于 2012-10-09T12:07:35.157 回答