使用标准技术使用RSA密钥/对,其公钥加密16字节随机密钥,使用AES / CBC / PKCS5Padding加密我的数据。
我正在使用充气城堡我需要加密通常大数据流(512MB +)。
在运行性能测试以了解加密的开销时,我发现加密比未加密的数据贵近30-40%。
这是预期的吗?
示例代码
public InputStream encryptStream(InputStream streamToEncrypt, byte[] key, byte[] iv, byte[] encryptedKey // 256 bytes) {
final Cipher cipher = getCipher(Cipher.ENCRYPT_MODE, key, iv);
byte[] civ = cipher.getIV();
...
ByteArrayInputStream ivEncryptedKeyStream = new ByteArrayInputStream(ivEncryptedKeyArray);
CipherInputStream encrypted = new CipherInputStream(streamToEncrypt, cipher);
return new SequenceInputStream(ivEncryptedKeyStream, encrypted);
}
其他地方
InputStream encryptedStream = ...encryptStream(plainStream, key, iv, encKey);
IOUtils.copyLarge(encryptedStream, outputStream);
我玩过java服务器args;确认AES-NI指令集已打开等。 只是想知道加密大流时我应该期待什么开销?
编辑:更正了我正在使用bouncycastle的信息,仅用于密钥对生成。对于使用SunJCE作为安全提供程序的AES加密。
答案 0 :(得分:3)
将Bouncy Castle用于Oracle Java API中的所有内容的想法让我感到震惊。由于Bouncy只是一个软件库,因此不会为Bouncy启用AES-NI。 Java不会用硬件指令神奇地替换AESFastEngine。如果你想拥有速度,只需使用Oracle实现。
至于开销:是的,应该预期开销。与其他计算相比,百分比有多大取决于机器和其他计算的性能。但是,40%可能是一个合理的期望。
注意: