2011-01-11 18 views
6

AES 128ビットキーを使用して4.2 MBの.dcfファイルを解読しようとしましたが、暗号化には33秒かかりました(関数cipher.doFinal(data))は正常ですか?ここでAndroidで遅いAES解読

は、コードスニペットです:

long start = System.currentTimeMillis()/1000L; 
      try { 
       SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); 
       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
       cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec); 

       android.util.Log.d("TEST", "Start decoding...." + String.valueOf(length)); 

       byte[] decrypted = cipher.doFinal(content); 

       File file2 = new File(Environment.getExternalStorageDirectory().getPath() + "/test.mp3"); 
       OutputStream os = new FileOutputStream(file2); 
       os.write(decrypted); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      long end = System.currentTimeMillis()/1000L; 

      android.util.Log.d("TEST","Time "+ String.valueOf(end-start)); 
+0

私はこれがハードウェアに依存すると思っています。私の欲望は、たとえば妻の野火よりもすばやくありますか? – Squonk

+0

@MisterSquonk、試しましたそれは私の三星銀河のスピカで約30〜33秒かかったエミュレータでは、それは約25〜30秒かかりました –

+0

あなたは私があなたのようなそのようなファイルを作成する方法を説明する場合は、私はHTC Desire(Froyo)でコードを試してみることにします。 – Squonk

答えて

2

あなたはすなわちcipher.doFinal()を呼び出した後、右の前に、右System.currentTimeMillis()を呼び出して、ベンチにファイル書き込みせずに撮影した時間を試してみてください。

Androidベースの携帯電話では、通常、500MHz以上でクロックされた最近のARMプロセッサを使用しています。このような獣は理論的に1秒あたり数メガバイトのデータをAESで暗号化またはAES解読できます。

のAndroidコードでは、ほぼJava仮想マシンDalvikが使用されています。 Android-2.2より前のバージョンでは、これはインタープリタ(JITコンパイラなし)です。これは、コンピューティングが集中するタスクではやや遅いことを意味します。 あなたが見ている普通のパフォーマンスは、実際にはAES操作そのもの(ファイル書き込みではありません)から来ています次に可能な答えは、あなたのVMがJavaで書かれ、Dalvikで解釈されるAES実装を提供するということです。その場合、より良いVM実装(VMがAES用のネイティブコード実装を使用することができ、Android 2.2以降では、DalvikにJIT compilerがあるためコード実行のパフォーマンスが向上する) 。

+0

こんにちはトーマス、あなたの答えはありがとう。私はファイルの書き込みを取り除き、それは約30-33秒のcipher.doFinal機能をfroyoエミュレータまたは25-30秒のサムスンギャラクシースピカ(eclair)で取った。私の友人はブラックベリーで同じ仕事をして、約8秒かかった。 –

0

私の知る限りでは、他のプラットフォーム上でAESを使用して作る...これは残念ながら、Googleの一部に大きな手落ちである

:-(AndroidのAPIを介して、ARMチップのAES暗号化/復号化のハードウェアへのアクセスを取得する方法はありませんa LOT速い....

関連する問題