0

私はAndroid用のアプリを開発しています。このアプリでは、Rijndael の暗号化/復号化にアルゴリズムを使用する必要があります。

このアルゴリズムを使用するには、IV をマウントする必要があります。ケースでは、バイトの配列です。ここまでは順調ですね。

問題は、C# で記述された Web サービスから同じ IV を使用しなければならないことです。

したがって、C#は次のとおりです。

byte[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62 };

Java で同じことをしようとすると、エラーが発生し、キャストをいくつか追加することを提案しました。コードをこのようにする理由:

byte[] bytIV = { 121, (byte) 241, 10, 1, (byte) 132, 74, 11, 39, (byte) 255, 91, 45, 78, 14, (byte) 211, 22, 62 };

それでもうまくいきませんでした。

誰か私が何をしているのか提案がありますか?

ありがとう!


ここで使用した例では、(バイト) の代わりに (キャスト) を使用しました。例を修正しました。注: 私のコードには (キャスト) がありました。コードには (バイト) がありました。

4

3 に答える 3

0

Javaでは、バイトの範囲は-128〜127です。128より大きいまたは-127より小さい数値はバイトに収まらないため、キャストが要求されます。Javaでは、次のようなキャストを追加します(int)または(double)は、数値をそれぞれintまたはdoubleにキャストします。問題を解決するには、配列をバイト配列ではなく、short配列またはint配列に変更する必要があります。次に、宣言に含まれているキャストを削除します。以下のいずれかがあなたのために働くはずです。

int[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };

また

short[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };
于 2012-07-23T14:54:13.463 に答える
0

バイトは 8 ビット符号付きです。それより大きい配列値を設定しています。例えば241。そのため、キャストを追加する必要があり、簡単なテストの結果は次のとおりです。

byte b2 = (byte) 241;           
System.out.println("" + b2);

出力 = -15

したがって、あなたの問題

于 2012-07-23T14:44:47.560 に答える
0

バイトは、-128 から 127 までの 8 ビット符号付きです。したがって、241 をキャストすると -15 が返されます。これは、C# の符号なしバイトの 241 と同じビットです。問題がわかりません。しかし、バイトへのキャストは(byte)241ではなく で行われ(cast)241ます。

于 2012-07-23T14:48:36.097 に答える