CBC加密算法C语言,c – AES / CBC加密和解密之间的速度差异?

博主在文中探讨了AES/CBC模式下解密相对于加密的速度差异问题。使用32字节加密密钥和16字节块大小进行测试,发现解密速度较慢。测试覆盖了不同数据块大小,包括64B、64KB和10MB到520MB,并在无虚拟内存和I/O操作的环境下进行,以确保准确度。加密和解密的性能差异引发疑问,怀疑可能实现存在异常。更新提到在另一台PC上重复测试,使用随机数据并提供了解密实现的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

> 32字节(256位)的加密密钥;

> 16字节(128位)的块大小.

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

64B:

64KB:

10MB – 520MB:

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

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

更新:

>此测试在另一台PC上执行;

>该测试使用随机数据执行;

> 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(ciphertext), cipherSize);

stfDecryptor.MessageEnd();

*dataOutputSize = decSink->TotalPutLength();

更新2:

>添加了64字节块的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值