2

我在我的 Android 项目上使用 AES 解密来解密大字符串对象 ( > 1 MB )。

我正在使用这种方法:

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 吗?

4

2 回答 2

1

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

于 2013-08-02T21:35:45.890 回答
0

有没有办法在 android 设备上改进这种方法?

也许,你可以看看这里,不过据说 AES 相当快。

我应该剪掉加密的字符串来加速这个过程吗?

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

我应该使用 SpongyCastle 吗?

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

于 2013-08-02T21:08:52.877 回答