2010-11-23 23 views
3

私たちは、2つのシステム間でデータを暗号化するスキームのプロトタイプを試してきました.1つは.NETで、もう1つはJavaです。単純な128ビットAES暗号化を使用するつもりでした。AES 128 DOT NETとJavaの互換性

私が直面している問題は簡単ですが、適切な解決策を見つけることができません。たぶんAESや暗号の一般的な私の理解は少ないです。

「9c361fec3ac1ebe7b540487c9c25e24e」の16進数文字列で表される定義済みキーがあるとします。 これは16バイトのキーです。 Javaで暗号化部は「hexStringToByteArray」関数は、バイト配列に16進文字列に変換し

final byte[] rawKey = hexStringToByteArray("9c361fec3ac1ebe7b540487c9c25e24e"); 
    final SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES"); 
    // Instantiate the cipher 
    final Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 

    final byte[] encrypted = cipher.doFinal(plainText.getBytes()); 

だろう。問題は、Javaでは、バイトが署名されていることです。つまり、値9Cは-100であり、156ではなく(.NETにあるように)-100です。

は、Javaでは、これは次のようになります。.NETで-100,54,31,-20,58,-63,-21,-25,-75,64,72,124,-100,37,-30,78

は、しかし、これは次のようになります。156,54,31,236,58,193,235,231,181,64,72,124,156,37,226,78質問

: は、キー自体の表現が異なることを考えると、それは暗号化プロセス自体に影響を与えるのでしょうか? これはCBCとPADDINGのない単純な暗号化です。

編集:コードを書式設定するように更新しました。

+0

こんにちは私は同じ問題で苦しんでいます。私のJava暗号化データは、.net暗号化データとは異なります。私はあなたがたどったのと同じ方法に従った。君の力が必要。 –

答えて

3

私はあなたに全く問題がないと思います。両方のプラットフォームでまったく同じデータを持っています。あるバージョンはそれを符号付きデータとして示し、もう1つは符号なしデータとして示していますが、ビット自体は同じです。

暗号化にこれらのキーを使用する際に問題が発生することはありません。

+0

私は実際にC#、Java、Delphiでこれを行う必要がありました。暗号化アルゴリズムが同じである限り、あなたはうまくいくはずです。 – kemiller2002

+0

私はこの質問を投稿した後帰り途中でそれを実現しました。根底にあるビットは同じでなければなりません! :) – Serendipity