有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将AES加密从Java移植到Objective

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

然而,当我试图将Objective-C中的加密数据发送到服务器(我同样无法访问服务器)时,服务器向我发送了一个“DER input not A octet string”错误。我认为这段代码是用Java编写的,我无法在Objective-C中复制它,而Objective-C正是我成功完成任务的必经之路

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

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

非常感谢您对如何将这一小部分移植到Objective-C的任何帮助

谢谢


共 (1) 个答案

  1. # 1 楼答案

    发生的情况是cipher.getParameters()调用返回AlgorithmParameters的一个实例。此实例有一个方法^{},其描述如下:

    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.

    现在,据我所知,没有所谓的默认ASN。对IV进行1阶编码,但由于IV基本上是字节数组,因此最符合逻辑的ASN。1编码是八位字节字符串。当DER编码时,这是ASN。1 type有一个标签,其值为04h,然后是长度。长度将始终是直接编码为单个字节的IV的大小。IV将始终具有基础密码的块大小,对于AES,它始终为16字节

    最后,您应该可以将值为04h10h的字节前置到IV