繁体   English   中英

适用于ObjectiveC的Java等效解码

[英]Java equivalent decoding for ObjectiveC

我需要将Java代码移植到目标。 但是我被Java中使用的解码机制所困扰。 由于在ObjectiveC中使用了错误的解码,所以我最后的结论是Java代码出错了。 以下是我遇到的Java代码:

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));

上面代码的输出如下

'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"

当我用ObjectiveC编写相同的代码时,我使用了以下代码

NSString *s = parsedMessageDict[@"s"]; //ZB3NNxAMNB/x6JpAryCd0g==
NSData *salt = [[NSData alloc] initWithBase64EncodedString:s options:0];

区别在于,在Java中,salt是由byte []给出的,而在objectiveC中,其声明为NSData。 这样做是否会造成任何问题。 此后,所有数据都基于该值进行处理。 因此,我自己在这里做错了,当然,最终输出将是错误的。

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

谁能提出建议?

NSData实例包装字节缓冲区,并允许您对其进行操作。 它与Java字节数组的ObjC等效。 如您在此处所做的那样,从以64为基数的编码字符串中获取字节是完全合理的,并且会生成NSData实例。 您要打印的第二和第三行日志没有意义,因此您不应查看它们来检查是否有任何等效性 。)

由于您在此处进行加密,因此这取决于您下一步要做什么,这决定了如何使用现有的NSData。 的确,C风格的加密API将需要更多的本机表示形式的一堆字节(例如unit8_t * )。 如果调用它的-bytes方法, NSData可以为您提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM