2012-05-01 157 views
1

我正在編寫需要加密和解密文件的應用程序。我的問題是解密速度比加密慢5倍。我已經剝離了所有的文件讀/寫操作,並且只對加密過程進行了基準測試。結果是非常令人驚訝的:加密和解密速度之間的AES奇怪差異

加密與encryptionCipher.doFinal() 1.5 MB字節陣列(其是javax.crypto.Cipher中的實例)

~1600 ms

解密與decryptionCipher.doFinal() 1.5 MB字節陣列(其是使用javax的實例.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代碼中調用它們。