首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES128加密CBC/无填充Objective-C

AES128加密CBC/无填充Objective-C
EN

Stack Overflow用户
提问于 2019-12-04 19:10:42
回答 1查看 140关注 0票数 0

我们需要在安卓和IOS中使用AES128加密请求,然后在用Java编写的后端服务器中发送加密的消息。

我们的Android加密代码如下:

代码语言:javascript
复制
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);

其中keyspec和ivspec是随机生成的字节。

在Objective-C中,这是我们进行加密的方式。

代码语言:javascript
复制
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时,加密的字节只返回一系列的零。

请建议如何在Objective-C中使用AES/CBC/NOPadding算法进行AES 128加密。

EN

回答 1

Stack Overflow用户

发布于 2019-12-05 21:35:29

您已经请求了填充:kCCOptionPKCS7Padding。这和Java的NoPadding不是一回事。删除填充选项。(您可以使用0来表示“没有选项”。)

也不清楚你加密的其他部分是否都是一样的。您没有在Java代码中包含密钥生成或IV。

(请注意,如果您从相同消息的加密算法中获得完全相同的字节,那么您正在以一种不安全的方式使用加密算法。安全加密构造将为每次加密生成不同的密文。我知道您的服务器可能正在使用这种不安全的方法;这是一个非常常见的错误。但它是不安全的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59174640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档