ObjectiveC的Java等效解码

时间:2016-10-07 12:24:14

标签: java objective-c

我要求将java代码移植到目标。但我陷入了Java中使用的解码机制。由于ObjectiveC中使用了错误的解码,我的最终结果是Java代码出错了。以下是java代码,我被卡住了:

    C:\Windows\system32>WinRM quickconfig
 WinRM service is already running on this machine.
 WinRM is not set up to allow remote access to this machine for management.
 The following changes must be made:

 Create a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this
 machine.

 Make these changes [y/n]? y

 WinRM has been updated for remote management.

 Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this
 machine.

以上代码的输出如下

String s = values.getProperty("s");
byte[] salt = Base64.getDecoder().decode(s);
System.out.println(s);
System.out.println("Salt DECODED = " + salt);
System.out.println("Decoded value as string " + new String(salt));

当我在objectiveC中写道时,我使用了以下代码

's' holds the string value "ZB3NNxAMNB/x6JpAryCd0g==",
'salt' holds the value "Salt DECODED = [B@180bc464",
'salt' hold the string value "Decoded value as string d�7"

不同之处在于,Java salt以byte []和objectiveC形式给出,它被声明为NSData。这是否会导致任何问题。此后,所有数据都是基于该值进行处理。所以我在这里做错了,当然,最终输出将是错误的。

在objectiveC中,我应该将salt解码为字符串并转换为字节数组还是必须将NSData转换为字节数组?

有人能提出建议吗?

1 个答案:

答案 0 :(得分:0)

NSData实例包装了一个字节缓冲区,并允许您对其进行操作。它是一个Java字节数组的ObjC等价物。从您在此处执行的64位编码字符串中获取字节非常合理,并生成NSData实例。 (您要打印的第二个和第三个日志行没有意义,因此您不应该查看它们以检查任何类型的等效性。)

由于您在这里进行加密,这取决于您接下来要做什么,这决定了您现在拥有的NSData。确实,C样式的加密API需要一堆字节(比如unit8_t *)更多的C-native表示。如果您调用NSData方法,-bytes可以为您提供。