我在使用PHP来解密与iOS 5.x中的CommonCrypto库进行加密的字符串的麻烦。下面是参数:解密AES CTR小端用PHP
Algorithm: AES-128
Mode: CTR
Mode options: CTR Little-Endian
Padding: None
这是我最好的尝试的样品,在它:
<?php
$encrypted = base64_decode('MlNFlnXE1sqIsmKZRtjChBvUMgiJlXgdjHVxQJ6JK24Id4uaN9NK/nBtY+cgrMJR/PRJRCmIUx0boQO5XqJYZ8VJ0w==');
$key = base64_decode('HB+dD1Irj2rXQ/nO+IuqSiK9xVE3PD9cZGIGzrMtwtA=');
$iv = base64_decode('2gxxKYU/G4lj7174e5wj+g==');
$cryptor = mcrypt_module_open('rijndael-128', '', 'ctr', '');
mcrypt_generic_init($cryptor, $key, $iv);
echo mdecrypt_generic($cryptor, $encrypted);
mcrypt_generic_deinit($cryptor);
mcrypt_module_close($cryptor);
输出看起来是这样的:
Lorem ipsum dolo?N??]ѕȢ?+?
????x??k????}??'???Ŧ??;t
但它应该是“Lorem存有悲坐阿梅德,consectetur adipisicing ELIT,SED做...“(包括尾随省略号。)
块大小为16,它的前16个字符正确。这似乎指向Mcrypt和CommonCrypto之间的AES CTR反递增过程不匹配。我从目前听到的每个人都认为这是Big Endian vs. Little Endian的问题。
我花了几天,试图找出这一切的字节顺序和反递增的东西对我自己的,但它仍然是巫术我。 :-(我只需要一些能正确解密我的字符串的PHP代码,我不在乎算法运行的速度有多快,我可以放弃Mcrypt而选择PHP本地解决方案或其他PHP扩展,只要这是一个常见的一种。但是,在iOS端改变的事情是不一个选项。
请帮帮忙!
什么是由mencrypt_enc_get_iv_size返回的大小()?这应该是其他情况下使用的长度; http://www.php.net/manual/en/function.mcrypt-enc-get-iv-size.php – 2013-05-10 19:34:17
它返回16,与我的IV长度相同。 – curtisdf 2013-05-10 19:48:26