2009-05-14 40 views
1

暗号化されたデータがC#から取得されている暗号化クラス(AES/CBC/PKCS7Padding)を作成しています。base64でエンコードされた文字列をJavaバイト配列に変換する

usiTyri3/gPJJ0F6Kj9qYL0w/zXiUAEcslUH6/zVIjs =

とキーとしてSecretKeySpecに渡すためにJavaのbyte配列に変換します。私は(base64エンコードである)次の文字列を取りたいです。私は、符号なしバイトを持つC#と、符号付きバイトしか持っていないJavaの問題があることを知っています。どのようにすれば、127より大きな値を持つこのスティングを渡すことができますか?そして、javaがキーと初期化ベクトルを受け入れるようにしますか?

+2

(これは良い答えです)http://stackoverflow.com/questions/469695/decode-base64-data-in-javaの重複 –

+0

受け入れられた答えはそれほど良いものではありませんが、代わりに最高点を持つものを使用してください – kdgregory

+0

おそらく私は質問にあまり読みすぎていますが、私は受け入れられた答えを推測しているのがおそらくこのアプリケーションに最適です。恩恵を受ける可能性の低いソリューションに複雑性を導入する必要はありません。 – erickson

答えて

2

base64でエンコードされたデータは、各バイトで6ビット以上を使用しないため、バイト符号化について心配する必要はありません(その理由は、ベース64と呼ばれます。データバイト)。

結果のデータ(4つの64文字ごとに3データバイト)が問題になる場合は、それを心配しないでください。 C#の符号なしバイト255は、Javaの符号付きバイト-1と同じです。

データをエンコードするには、ビットごとに0xffの各バイトをintに格納し、最下位8ビットをエンコードします。あるいは、ビットごとにまたは0x80を持つ各バイトをant intに格納し、最下位8ビットをデコードします。

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

関連する問題