解密AES-128-ECB,第一个字符解密为4个字节

时间:2016-02-19 15:16:47

标签: php ios aes mcrypt

我有一个iOS应用程序正在使用[NSData AES128EncryptWithKey:]加密字符串并通过HTTP发送它。我们没有编写应用程序,为什么它不只是使用HTTPS而是使用带有AES-128位加密的HTTP - 我不知道。我知道这不太理想,但我正在与客户给我的东西一起工作,现在我没有能力/权限来解决这个问题。

我负责编写一个服务器应用程序来获取这些数据,这些数据作为原始二进制HTTP POST发送并解密POST主体,然后处理该发送的数据。我正在使用PHP,因为它是我能够以最快的速度编写服务器端的语言(我正在修改类似的服务器应用程序,它已经完成了我们需要它做的工作。最后一次使用数据未加密并通过HTTPS发送)

当我使用mcrypt_decrypt(MCRYPT_RIJNDAEL_128)或openssl_decrypt(AES-128-ECB)解密字符串时,使用开发人员提供的16字节密钥,字符串的第一个字符扩展为4个字节,全部错误,其余字符串解密就好了。字符串以username = WHATEVER开头,然后在其后面有大约700字节的其他数据(总长度是16的倍数,它是正确填充的服务器端,我能说的最好)。整个字符串是正确的,但在解密时,我得到的是:

o@{asername=WHATEVER...

我所做的每一次搜索都告诉我,当使用带有错误IV的AES-CBC时,错误的16个字节,但它使用ECB正确解密 - 只是第一个字节错误,并扩展到4个字节。

我错过了什么?

1 个答案:

答案 0 :(得分:-1)

基于有关长度前缀的注释,我检查了已知的字符串长度与解密的字符串长度,并且关闭了20个左右的字符。似乎前面填充了一些二进制数据,当打印到终端屏幕时导致空字符并以某种方式删除后面的字符(缺少' u'在用户名中)?当我做一个substr($ data,20)时,字符串打印正确。前20个字节,不确定究竟是什么,但我找到了我需要的数据。感谢。