我在纯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
答案 0 :(得分:3)
没有错。 AES更快,因为:
从计算的角度来看,RC2相当复杂。
AES已在软件中大量优化,因为它经常被使用。
某些CPU具有AES的硬件加速功能(例如x86为AES-NI)。