PHP:使用mcrypt在计数器模式下解密AES

时间:2012-10-07 13:19:18

标签: php aes mcrypt rijndael

我在计数器模式下使用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);

结果是输出上的垃圾:(我不明白我做错了什么。有人可以对这个问题进行一些解释吗?

1 个答案:

答案 0 :(得分:0)

phpseclib's pure PHP AES implementation几乎是可移动类型AES实现的4倍:

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

那时mcrypt不可用。当mcrypt可用时,它会使用它,甚至更快。

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