簡體   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