2009-05-08 44 views
0

javaでAES/CBC/PKCS5Paddingパディング標準を使用していて、私の友人がC#.NETでPKCS7標準を使用しています 私の友人がAESを使用してデータを暗号化し、それを解読する。AES暗号化でjavax.crypto.IllegalBlockSizeExceptionが発生する

しかし、私のデータ長が2920バイトを超えると、C#.NETのデータを暗号化してjavaのデータを復号化すると、私の復号化がうまくいきません。 以下のエラーが表示されます。

:あなたは再びデータストリームが不完全であることを意味しているバッファをフラッシュするのを忘れ BAPI

+0

cipher.dofinal("Your byte array","offset...put 0","block size...16");を使用してたくさんの答えを提供します。 – skaffman

+0

C#タグを追加しました。これは、Javaで見ているC#のバッファをフラッシュしないという問題のようです。また、CTRモードを使用することで、パディングの問題を回避することもできます。 –

答えて

1

おかげ「javax.crypto.IllegalBlockSizeExceptionパッド入りの暗号で復号化の際、入力の長さが16の倍数でなければなりません」 。

[編集] C#については分かりませんが、Javaでは、すべてのデータが到着した後でdoFinal()を呼び出す必要があります。 (the docs参照)。

問題の原因は、暗号化APIがいつ完了したかを知る必要があることです。データから判断できない場合は、「包み込み、最後のチェックサムを作成する」というメソッドを呼び出して、受信者がデコードできるようにする必要があります。

+0

バッファをフラッシュするには? – Deepak

0

はちょうど「パディングされた暗号を復号化する際に16の倍数でなければならない入力の長さ」のためにグーグルで

eg : c.dofinal(ByteArray,0,16);