2012-05-01 29 views
1

私はファイルを暗号化して解読する必要があるアプリケーションを書いています。私の問題は、復号化が暗号化より約5倍遅くなることです。私はすべてのファイルの読み書き操作を取り除き、暗号プロセスだけをベンチマークしました。結果は非常に驚くべきことであった:(javax.crypto.Cipherのインスタンスである)encryptionCipher.doFinal() 1.5 MBのバイト配列のjavaxのインスタンスであるdecryptionCipher.doFinal() 1.5 MBのバイト配列を(解読暗号化と復号化の速度がAESの奇妙な違い

~1600 ms

暗号化

.crypto.Cipher)

~5800 ms

を私が知っているようにAES復号および暗号化は対称procのですので、私は、とても驚いています暗号化と復号化の速度に違いはないはずです。

私はAES/CBC/PKCS7Padding暗号を256ビットキーで使用しています。

これはどうしてですか?

+0

実際には、CBCデクリプスモードは暗号化(ブロックの復号化は並列化が可能)よりも速くなければならないため、もっと奇妙です[CBCモード](http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29) ) – sergico

+0

時間の経過を確認するためにアプリをプロファイルします。非効率的な実装である可能性があります。または、Spongy Castleプロバイダをアプリに含め、タイミングログステートメントを追加します。異なるプロバイダ(Sun/Oracle、Bouncy Castleなど)を持つデスクトップマシン上の同じコードと比較する –

答えて

0

(暗号化と利用可能なリソースが少ないため)暗号化と復号化にはAndroidで時間がかかることがあります。このようなタスクにはJNIが優先されます。 opensslルーチンを使用してJNIインタフェースを介してJavaコードで暗号化と復号化を行い、それらを呼び出す。