0

我正在开发一个加密其输入文件的应用程序。
我的代码是用于加密文件的(文件大小从 KB 到 4GB 不等):

    SecretKeySpec   key = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
    Cipher          cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
    byte[] block = new byte[8];
    int i;

    cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);

    BufferedInputStream bIn=new BufferedInputStream(new ProgressMonitorInputStream(null,"Encrypting ...",new FileInputStream("input")));
    CipherInputStream       cIn = new CipherInputStream(bIn, cipher);
    BufferedOutputStream bOut=new BufferedOutputStream(new FileOutputStream("output.enc"));

    int ch;
    while ((i = cIn.read(block)) != -1) {
        bOut.write(block, 0, i);
    }
    cIn.close();
    bOut.close();

我可以让它更优化(时间、IO、CPU)吗?
如何?

谢谢

4

3 回答 3

2

这是一个复杂而难以回答的问题。首先,无论你做什么,加密 4GB 的文件都需要时间。

蜂鸟这样的轻量级加密算法将帮助您到达那里 - 但是,您必须确保无论您在哪里使用它,AES 都不是绝对必要的。

于 2012-08-31T19:35:57.393 回答
1

选择更好的byte[] block大小会有所帮助(在 8k 到 1MB 的范围内,测试以找到适合您的场景的最佳大小),但除此之外,您无能为力使其更快(假设您保持当前的加密算法)。

于 2012-08-31T19:58:11.377 回答
1

您可以做的是使用AESFastEnginebouncycastle来加速aes块计算。

crypto/src/org/bouncycastle/crypto/engines

这个快速引擎使用T的表格是四舍五入的预计算表格,并且肯定会提高性能。

于 2012-09-03T08:21:28.907 回答