2013-02-06 39 views
0

我對使用Bouncy Castle的Blowfish加密的Android加密過程的速度非常慢感到驚訝。一個3 MB的文件花了3分鐘。有一些其他算法非常快嗎?我可以忍受不太可靠的安全。這是代碼。一切都在記憶中完成。沒有文件。Blowfish加密對於3 MB文件的移動極其緩慢

private BufferedBlockCipher cipher; 
private KeyParameter key; 

public Encryption(byte[] key) 
{ 
    try 
    { 
    BlowfishEngine blowfishEngine = new BlowfishEngine(); 
    CBCBlockCipher cbcBlockCipher = new CBCBlockCipher(blowfishEngine); 

    cipher = new org.spongycastle.crypto.modes.PaddedBlockCipher(cbcBlockCipher); 

    this.key = new KeyParameter(key); 
    } 
    catch (Exception ex) 
    { 
    } 
} 

public Encryption(String key) 
{ 
    this(key.getBytes()); 
} 

public synchronized byte[] Encrypt(byte[] data) throws CryptoException 
{ 
    try 
    { 
    if (data == null || data.length == 0) 
    { 
     return new byte[0]; 
    } 

    cipher.init(true, key); 
    return CallCipher(data); 
    } 
    catch (Exception ex) 
    { 
    return null; 
    } 
} 

private byte[] CallCipher(byte[] data) throws CryptoException 
{ 
    try 
    { 
    int size = cipher.getOutputSize(data.length); 
    byte[] result = new byte[size]; 
    int olen = cipher.processBytes(data, 0, data.length, result, 0); 
    olen += cipher.doFinal(result, olen); 

    if (olen < size) 
    { 
     byte[] tmp = new byte[olen]; 
     System.arraycopy(result, 0, tmp, 0, olen); 
     result = tmp; 
    } 

    return result; 
    } 
    catch (Exception ex) 
    { 
    return null; 
    } 
} 
+0

您沒有發佈您的代碼。正確使用河豚時,速度應該不會太慢。無論是BC的實現都很糟糕,還是以低效的方式使用它。爲什麼選擇河豚而不是AES? AES強大且快速。 – CodesInChaos

+0

好的,我添加了上面的代碼。我選擇Blowfish只是因爲它在安全方面有很好的聲譽,並且規格說明速度很快。也許你是對的,BC的實施很糟糕。 – AndroidDev

+0

我嘗試了這個移動應用程序,它使用AES。它在幾秒鐘內加密了一個3 MB的文件:http://goo.gl/fcOjy所以很明顯,有什麼不對勁。 – AndroidDev

回答

0

河豚實際上是一種快速密碼。即使Java運行緩慢,它也應該提供一些Mb /秒。 最可能的問題在於如何使用它(例如,以8字節塊的形式寫入文件)。或者,BouncyCastle團隊如何編碼它。 嘗試AES-128,它應該更快。 而且,最快的解決方案(更安全)是RC4。

+0

從我讀到的,Blowfish很快,但這只是一個相對術語。慢加密與文件無關。整個數據存儲在一個字節數組中,並在內存中進行處理。也許Bouncy Castle的執行速度緩慢,但我認爲它在移動和非移動應用程序中廣泛使用,我懷疑它。 – AndroidDev

+0

您可以簡單地與分析器檢查哪部分代碼是最慢的。 –