2012-08-31 100 views
0

我正在開發一個加密其輸入文件的應用程序。
我的代碼是這樣的加密文件(文件大小從一些KB不同至4GB):在Java中優化文件加密

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)?
如何?

謝謝

回答

2

這是一個複雜而難以回答的問題。首先,無論你做什麼,加密4GB的文件都需要花費時間。

Hummingbird這樣的輕量級加密算法可以幫助您達到目標 - 但是,您必須確保無論您使用何種方式,AES都不是絕對必要的。

+0

Bouncycastle不支持'蜂鳥',是嗎? – RYN

1

挑選一個更好的byte[] block規模將有助於(某事在8K到1MB的範圍,試驗找到您的方案optimium大小),但除此之外,沒有太多可以做,以使其更快(假設你保持當前加密算法)。

+0

你推薦什麼算法來加速加密? – RYN

+0

@ 4r1y4n - 在這方面我不是一個真正的加密專家。不過,我確定有[在線大量信息](http://www.cse.wustl.edu/~jain/cse567-06/ftp/encryption_perf/index.html)。 – jtahlborn

1

你可以做的是從bouncycastle庫使用AESFastEngine庫來加速aes塊計算。

crypto/src/org/bouncycastle/crypto/engines 

這種快速的引擎使用其四捨五入預先計算表,並肯定會在性能增益T表。