2016-10-07 15 views
0

私は目的にJavaコードを移植する必要があります。しかし、私はJavaで使われているデコードの仕組みに固執しています。 ObjectiveCで間違ったデコードが使用されたため、最終的にJavaコードから間違っています。ObjectiveCの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)); 

上記のコードの出力はobjectiveCで書かれた同じ私は、私は次のコード

NSString *s = parsedMessageDict[@"s"]; //ZB3NNxAMNB/x6JpAryCd0g== 
NSData *salt = [[NSData alloc] initWithBase64EncodedString:s options:0]; 
を使用していた

's' holds the string value "ZB3NNxAMNB/x6JpAryCd0g==", 
'salt' holds the value "Salt DECODED = [[email protected]", 
'salt' hold the string value "Decoded value as string d�7" 

を次の:私は捕まってしまったJavaコードは、以下に示します

違いは、Javaのsaltはbyte []として、objectiveCではNSDataとして宣言されていることです。これが今後の課題となりますか?以後、すべてのデータは値に基づいて処理されます。だから私はここで間違っています、間違いなく、最終的な出力は間違っています。

objectiveCでは、塩を文字列としてデコードしてバイト配列に変換するか、NSDataをバイト配列に変換する必要がありますか?

誰でも提案できますか?

+0

あなたが '[B @ ...'を印刷すると、これはバイト[]内の値とは無関係であり、バイト[]を持っているということだけであり、このhashCodeはランダムそれを実行します。これを再現しようとする根気的な理由はありません。 –

+2

NSData *はObjCの「バイト配列」です。それは正しい形式のようです。 –

+0

@BenZotto b/w nsdataとバイト配列に違いはありますか? –

答えて

0

NSDataインスタンスは、バイトのバッファをラップし、それを操作できるようにします。これは、Javaバイト配列のObjCに相当します。ここで行っているように、ベース64エンコードされた文字列からバイトを取得することは完全に合理的であり、NSDataインスタンスになります。 (印刷している2行目と3行目は意味がありませんので、等価性を確認するためにそれらを見るべきではない

ここで暗号を行っているので、あなたが今持っているNSDataを使って何をするかを決定する、次に何をしたいのかを決定します。 Cスタイルの暗号APIが必要とするバイトの集まり(unit8_t *のような)のよりCネイティブの表現が存在することは事実です。 -bytesメソッドを呼び出すと、NSDataがそれを与えることができます。