2013-08-02 35 views
2

我在我的Android项目上使用AES解密来解密大型字符串对象(> 1 MB)。Android AES Decrpyt字符串需要太长时间

我用这个方法:

public static String decryptAES(String cryptedString, byte[] byteArrayAESKey) { 

    try { 
     IvParameterSpec ips = new IvParameterSpec(General.InitVector.getBytes("UTF-8")); 
     SecretKey aesKey = new SecretKeySpec(byteArrayAESKey, "AES"); 
     byte[] TBCrypt = Base64.decode(cryptedString, Base64.DEFAULT); 
     // Decryption cipher 
     Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 
     // Initialize PBE Cipher with key and parameters 
     decryptCipher.init(Cipher.DECRYPT_MODE, aesKey, ips); 
     // Decrypt the cleartext 
     byte[] deciphertext = decryptCipher.doFinal(TBCrypt); // this may take a long time depending on string input length 
     return new String(deciphertext, "UTF-8"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e("AES", "Decrypt failed : " + e.getMessage()); 
     return ""; 
    } 
    } 

它运作良好,但在大的加密字符串,它需要在许多设备上很长一段时间。

有没有办法在Android设备上改进此方法?我应该削减加密的字符串以加速过程吗?我应该使用SpongyCastle吗?

回答

0

是否有改善Android设备,这个方法的方法吗?

也许,你可以看看here,而且也说,AES是蛮快的,虽然。

我是否应该削减加密的字符串以加速进程?

是的,这应该是问题。通常你只需要加密数据的关键部分。也许重构应该解决这个问题。

我应该用SpongyCastle吗?

不知道,但如果我在哪里你,我会先看看数据加密。

1

byte[] deciphertext = decryptCipher.doFinal(TBCrypt);不这样做!请考虑使用流,也许直接输出文件流(如果需要)?