0

我的任务是将 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 的帮助。

谢谢。

4

1 回答 1

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 字节。

因此,最后,您应该可以通过将字节值04h10hIV 前置来确定。

于 2012-08-22T17:53:41.147 回答