c++ - AES/CBC 加密和解密之间的速度差异?

标签 c++ cryptography aes benchmarking crypto++

我想知道,从理论上讲,在以下条件下,与 AES/CBC 加密相比,AES/CBC 解密要慢多少:

  • 32 字节(256 位)的加密 key ;
  • 16 字节(128 位)的 block 大小。

我问的原因是我想知道我有一个实现的解密速度是否异常慢。我对不同大小的随机内存块做了一些测试。结果如下:

64B:

enter image description here

64KB:

enter image description here

10MB – 520MB:

enter image description here

所有数据都存储在我系统的内存中。应用程序自行生成要加密的数据。测试 PC 上禁用了虚拟内存,因此不会有任何 I/O 调用。

在分析表时,加密和解密的差异是否意味着我的实现异常缓慢?我做错了什么吗?

更新:

  • 此测试在另一台电脑上执行;
  • 这个测试是用随机数据执行的;
  • Crypto++用于AES/CBC加密和解密。

解密实现如下:

CryptoPP::AES::Decryption aesDecryption(aesKey, ENCRYPTION_KEY_SIZE_AES);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, aesIv);

CryptoPP::ArraySink * decSink = new CryptoPP::ArraySink(data, dataSizeMax);
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, decSink);
stfDecryptor.Put(reinterpret_cast<const unsigned char*>(ciphertext), cipherSize);
stfDecryptor.MessageEnd();

*dataOutputSize = decSink->TotalPutLength(); 

更新 2:

  • 添加了 64 字节 block 的结果

最佳答案

作为对称加密,加解密应该是fairly close in speed .不确定您的实现,但 there are ways to optimize if you're concerned about how the algorithm was used .在实验中,AES is not the fastest and CBC会增加安全性但会减慢速度。这是一个比较,因为您询问的是 key 和 block 大小:

enter image description here

关于c++ - AES/CBC 加密和解密之间的速度差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164502/

相关文章:

Node.js:尝试解密加密的对称 key 时出现无效的 RSAES-OAEP 填充

JavaScript WebCrypto importKey 错误 : AES key data must be 128 or 256 bits

c++ - 使用 iostate 标志测试文件写入失败

c++ - 'CREATE' 附近偏移量 8 处的 RedisGraph 语法错误

c++ - operator new 是否在异常后破坏初始化的对象?

javascript - 在 JavaScript 中加密 AES-GCM,在 Java 中解密

c++ - PKCS5_PBKDF2_HMAC 盐与 iv

java - iOS 和 Java 与 CTR 模式的 AES 互操作性

c++ - 使用 argv 读取图像

ruby - 在 ruby​​ 中,如何使用 ECB 模式和 PKCS7 填充进行 DES 加密