【发布时间】:2020-03-29 04:11:12
【问题描述】:
我们需要在 Android 和 IOS 中使用 AES128 对请求进行加密,然后在用 Java 编写的后端服务器中发送该加密消息。
我们的安卓加密代码如下:
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
其中 keyspec 和 ivspec 是随机生成的字节。
在 Objective-C 中,这就是我们进行加密的方式。
NSString* iv = @"a12bc1256b4de9a0";
NSData* ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData* cipherData = [NSMutableData dataWithLength:data.length+kCCBlockSizeAES128];
CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, keyData.bytes, keyData.length, ivData.bytes, data.bytes, data.length, cipherData.mutableBytes, cipherData
.length, &outLength);
问题在于,当我们比较 Java 程序和 Objective-C 的加密字节时,它们并不相同。我知道 Objective-C 中的 CCOption 参数应该是 CBC 但它不在 CommonCrypto 库的枚举列表中。当我们将其设置为 0 时,加密后的字节只返回一系列零。
请就如何使用 AES/CBC/NOPadding 算法在 Objective-C 中进行 AES 128 加密提出其他替代方案。
【问题讨论】:
标签: ios objective-c encryption aes block-cipher