我想知道,从理论上讲,在以下条件下,与 AES/CBC 加密相比,AES/CBC 解密要慢多少:
- 32 字节(256 位)的加密 key ;
- 16 字节(128 位)的 block 大小。
我问的原因是我想知道我有一个实现的解密速度是否异常慢。我对不同大小的随机内存块做了一些测试。结果如下:
64B:
64KB:
10MB – 520MB:
所有数据都存储在我系统的内存中。应用程序自行生成要加密的数据。测试 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 大小:
关于c++ - AES/CBC 加密和解密之间的速度差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164502/