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

时间:2012-08-22 15:48:33

标签: 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的帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

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

  

以主编码格式返回参数。如果存在此类参数的ASN.1规范,则参数的主要编码格式为ASN.1。

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

最后,你可以将值04h10h的字节前置到IV中。