1

暗号化されたデータが C# から取得される復号化クラス (AES/CBC/PKCS7Padding) を作成しています。次の文字列(base64でエンコードされたもの)を取得したい:

usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs=

それをJavaでバイト配列に変換して、キーとしてSecretKeySpecに渡します。C# には符号なしバイトがあり、Java には符号付きバイトしかないという問題があることはわかっています。では、127 より大きい値を持つこの文字列を渡し、Java にキーと初期化ベクトルを受け入れさせるにはどうすればよいでしょうか?

4

1 に答える 1

4

base64 でエンコードされたデータは各バイトで 6 ビットを超えるビットを使用しないため、バイトの符号を気にする必要はありません (データ バイトの一部を表すために 6 ビットである 64 文字のみを使用するため、base64 と呼ばれます)。 .

結果のデータ (4 つの base64 文字ごとに 3 データ バイト) が懸念される場合は、それについても心配する必要はありません。C# の符号なしバイト 255 は、Java の符号付きバイト -1 と同じです。

データをエンコードするには、各バイトを 0xff でビットごとに変換して int に格納し、最下位 8 ビットをエンコードします。または、各バイトを 0x80 でビット単位または単純に ant int に格納し、最下位 8 ビットをデコードします。

しかし、Bouncy Castle や標準の JCE を使用してこれらすべてを処理した方がよいと思います。PKCS7 の「S」は標準を意味するため、C# で暗号化されたデータは Java で正常に復号化され、その逆も同様です。

于 2009-05-14T21:38:27.610 に答える