[英]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.