ios – 使用AES进行数据加密

我正在构建一个将与服务器(php)通信的应用程序,这个通信(可能将与json)我想要加密.经过大量的搜索和阅读,我找到了
AESCrypt-Objc项目.

在测试加密时(我正在使用网络工具
AES Encryption test),我发现在加密结果中我缺少16字节的数据.

这是我正在使用的例子

在AES项目中:

String to be encrypted: “The quick brown fox jumped over the lazy dog”.
Password: “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);

WEB工具:

Same string and password

结果:

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

你可以看到我错过了一些字节…… 🙂
我已经尝试在算法中添加缓冲区,但没有成功.

有什么建议?
谢谢

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

最佳答案 我知道你试图避免这种情况,但我认为你可能需要花一些时间在
AESCrypt-Objc的源代码中,因为我怀疑它在某种程度上不加密最后一个块.

进入代码并查看您是否真正进入CCCryptorFinal调用,并记下其结果.这可以在AESCrypt-ObjC/NSData+CommonCrypto.m _runCryptor中找到:结果:.另一件需要考虑的是它们使用的默认填充类型,它似乎是kCCOptionPKCS7Padding,这也会对结束字节产生影响.

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

点赞