4

我正在构建一个将与服务器(php)通信的应用程序,并且我想加密这种通信(可能会使用 json)。经过大量搜索和阅读后,我找到了AESCrypt-Objc项目。在测试加密时(我正在使用网络工具AES 加密测试),我发现在加密结果中我丢失了 16 个字节的数据。这是我在 AES 项目中使用的示例:

要加密的字符串:“敏捷的棕色狐狸跳过了懒惰的狗”。密码:“12345678901234561234567890123456”

结果:

<7eda336b 82f3e279 ae7638fe cccfffc6 5fbef8da 6df76d97 67d8cfa8 5bce2ae9>

我的代码:

self.strnToBeEnc = @"The quick brown fox jumped over the lazy dog";
self.appKey      = @"12345678901234561234567890123456";
NSData *data2    = [self.strnToBeEnc dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", data2); 
NSData *s2 = [data2 AES256EncryptedDataUsingKey:self.appKey error:nil]; 
NSLog(@"%@", s2);

网络工具:

相同的字符串和密码

结果:

<7eda336b 82f3e279 ae7638fe cccfffc6 5fbef8da 6df76d97 67d8cfa8 5bce2ae9 ca2ed34a 48f85af2 909654d5 b0de0fb7>

如您所见,我缺少一些字节...:) 我尝试在算法中添加到缓冲区,但没有成功。

有什么建议吗?谢谢

(如果问题不够详细,请告诉我)

4

1 回答 1

2

我知道你试图避免这种情况,但我认为你可能需要花一些时间在AESCrypt-Objc的源代码中,因为我怀疑它以某种方式没有加密最后一个块。

进入代码,看看你是否真的接到了CCCryptorFinal电话,并记下它的结果。这可以在AESCrypt-ObjC/NSData+CommonCrypto.m _runCryptor:result:中找到。要研究的另一件事是他们使用的默认填充类型,这似乎kCCOptionPKCS7Padding也会对您的结束字节产生影响。

首先使用 AES 块大小的倍数的非任意长度字节进行测试,然后在验证后继续使用此处的可变长度字节。

于 2014-03-28T20:11:36.270 回答