java - 将 AES 加密从 Java 移植到 Objective-C

标签 java objective-c encryption aes

我的任务是将 AES 加密从 Java 移植到 Objective-C。我无权访问发生解密的服务器代码。使用FBEncryptor ,我成功地在 Objective-C 中对字符串进行了简单的 AES 加密,并在 Java 中对其进行了解密,反之亦然。

但是,当我尝试将 Objective-C 中的加密数据发送到服务器(同样,我无权访问)时,服务器向我发送了“DER 输入不是八位字节字符串”错误。我认为这段 Java 代码(我无法在 Objective-C 中复制)正在帮助我成功完成任务。

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, sKey);
String ivBase64 = Base64.encodeBytes(cipher.getParameters().getEncoded());

ivBase64 与加密字符串一起发送到服务器。

非常感谢有关如何将这个小部分 cipher.getParameters().getEncoded() 移植到 Objective-C 的任何帮助。

谢谢。

最佳答案

发生的情况是 cipher.getParameters() 调用返回 AlgorithmParameters 的实例。该实例有一个方法getEncoded()具有以下描述:

Returns the parameters in their primary encoding format. The primary encoding format for parameters is ASN.1, if an ASN.1 specification for this type of parameters exists.

现在,据我所知,IV 不存在默认的 ASN.1 DER 编码,但由于 IV 基本上是字节数组,因此最合乎逻辑的 ASN.1 编码是 OCTET STRING。当 DER 编码时,此 ASN.1 类型具有一个值为 04h 的标记,然后是长度。长度始终是直接编码单个字节的 IV 的大小。 IV 将始终具有底层密码 block 的大小,对于 AES 始终为 16 字节。

最后,您应该可以将值为 04h10h 的字节添加到 IV 之前。

关于java - 将 AES 加密从 Java 移植到 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12076851/

相关文章:

java - 使用什么模式在 Java 中解密来自 iPhone 的 RSA 消息?

java - 从 SQL Exception 对象获取引发异常的字段和表名称

java - 即使输入 Spring 长度变化,也会产生固定长度的 AES 加密输出结果

java - Android - 如何判断 db.execSQL 在 onCreate 上是否成功

objective-c - 创建多个 UILocalNotification

ios - 在 iOS SDK 中使用 Socket 编程的文本聊天应用程序

ios - 如果用户在其他地方单击然后 UIPickerView,如何使 UIPickerView resignFirstResponder

javascript - 如何从 webcrypto AES-GCM 加密中获取标签

java - 返回一个空字符串

java - 什么是出境饱和情况?在netty中如何处理?