gpt4 book ai didi

Java AES/CBC/PKCS5Padding 流加密性能与不加密相比

转载 作者:行者123 更新时间:2023-11-29 04:42:40 24 4
gpt4 key购买 nike

我使用的是使用 RSA key /对的标准技术,其公钥加密 16 字节随 secret 钥,该随 secret 钥使用 AES/CBC/PKCS5Padding 加密我的数据。 我正在使用 bouncy caSTLe 来满足我的需要 我需要加密通常大数据流 (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 服务器参数;确认 AES-NI 指令集已打开等。只是想知道加密大流时我应该期望的开销是多少?

编辑:更正了我正在使用 bouncycaSTLe 只是为了生成 key 对的信息。对于使用 SunJCE 作为安全提供程序的 AES 加密。

最佳答案

将 Bouncy CaSTLe 用于 Oracle Java API 中已有的所有内容的想法让我难以理解。不会为 Bouncy 启用 AES-NI,因为 Bouncy 是纯软件库。 Java 不会用硬件指令神奇地替换 AESFastEngine。如果您想提高速度,只需使用 Oracle 实现即可。

至于开销:是的,应该预料到开销。与其他计算相比,百分比有多大当然取决于机器和其他计算的性能。不过,40% 可能是一个合理的预期。

注意事项:

  • 最新的 Java 版本也使用 CPU 指令进行 BigInteger 操作,因此这也可能会加快 RSA 操作;
  • 对 Java 和/或 AES CBC 使用 PKCS#1 填充会使您的密文容易受到填充 oracle 攻击(如果这些攻击适用,例如在传输协议(protocol)中);
  • 确保您使用足够大的测试集,JIT 编译和优化可能会相对较晚才开始。

关于Java AES/CBC/PKCS5Padding 流加密性能与不加密相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38541662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com