c - 从 Openssl 对 AES 和 RC2 进行基准测试——为什么 AES 更快?

标签 c encryption cryptography openssl

我用纯 C 编写了一个简单的代码来对 Openssl 的 AES-CBC-256 和 RC2-CBC-128 进行基准测试。我的测试循环如下所示:

for(i=0; i<tests; i++)
    {
        timer_start();
        for(j=0; j<its; j++)
        {
            RC2_cbc_encrypt(input, enc_out, length, &key, iv_enc, RC2_ENCRYPT);
        }
        stop = timer_stop();
        printf("%f\n",(stop / its) * 1000);
    }

for(i=0; i<tests; i++)
    {
        timer_start();
        for(j=0; j<its; j++)
        {
            AES_cbc_encrypt(input, enc_out, length, &enc_key, iv_enc, AES_ENCRYPT);
        }
        stop = timer_stop();
        printf("%f\n",(stop / its) * 1000);
    }

但是出了点问题,在我测试代码的每台机器上我都得到了奇怪的结果,也就是说,每次 AES 都比 RC2 快。可能是什么问题呢?我使用 getrusage 来测量时间(在我的计时器中)。

AES:
0.010898
0.010471
0.010531

RC2:
0.023261
0.023392
0.023224

最佳答案

没有错。 AES 更快,因为:

  • 从计算的角度来看,RC2 相当复杂。

  • AES 已在软件中进行了大量优化,因为它的使用频率很高。

  • 一些 CPU 具有 AES 硬件加速(例如 AES-NI 用于 x86)。

关于c - 从 Openssl 对 AES 和 RC2 进行基准测试——为什么 AES 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281451/

相关文章:

node.js - 如何在 Node.js 中解密 Triple DES

javascript - 在浏览器中存储私钥的最佳方式?

c - 程序通过将每个退格替换为\b来将其输入复制到输出

c - 在 HP UX 中找不到 rexec

c - 我什么时候必须有空?

c - Nios 2 的 C 轮询和汇编

java - java 中的加密 - 最佳实践?

c - 在 C 语言中用于 RSA 解密的 OpenSSL EVP api 的 EVP_OpenInit() 中出现错误

java - 如何从 byte[] 数组中恢复 RSA 公钥?

c# - 如何在 C# 中获得与在 PHP 单元测试中相同的 HMAC256 结果?