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