我要求将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转换为字节数组?
有人能提出建议吗?
答案 0 :(得分:0)
NSData
实例包装了一个字节缓冲区,并允许您对其进行操作。它是一个Java字节数组的ObjC等价物。从您在此处执行的64位编码字符串中获取字节非常合理,并生成NSData
实例。 (您要打印的第二个和第三个日志行没有意义,因此您不应该查看它们以检查任何类型的等效性。)
由于您在这里进行加密,这取决于您接下来要做什么,这决定了您现在拥有的NSData。确实,C样式的加密API需要一堆字节(比如unit8_t *
)更多的C-native表示。如果您调用NSData
方法,-bytes
可以为您提供。