对于3 MB的文件,Blowfish加密在移动设备上非常慢

时间:2013-02-06 10:33:52

标签: android encryption blowfish

我很惊讶使用Bouncy Castle的Blowfish加密技术在Android上的加密过程非常缓慢。一个3 MB的文件花了3分多钟。还有其他算法非常快吗?我可以忍受不太可靠的安全性。这是代码。一切都在记忆中完成。没有文件。

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;
  }
}

1 个答案:

答案 0 :(得分:0)

Blowfish实际上是一种快速密码。即使Java速度很慢,它也应该提供一些Mb /秒。 最有可能的问题是你如何使用它(例如,用8字节块写入文件)。或者,BouncyCastle团队如何对其进行编码。 试试AES-128,它应该更快。 而且,最快的解决方案(安全性更低)是RC4。