2013-02-01 93 views
4

我想在ubuntu中用openssl测试RSA和AES的速度。AES比RSA加密更快?

我用下面的代码来测试它。

echo -n "" > message.txt 

openssl genrsa -out private.pem 1024 
openssl rsa -in private.pem -out public.pem -pubout 


for i in {1..1000} 
do 
    openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message_enc.txt 
done 

for i in {1..1000} 
do 
    openssl rsautl -decrypt -inkey private.pem -in message_enc.txt -out message_dec.txt 
done 

for i in {1..1000} 
do 
    openssl enc -e -aes-128-cbc -in message.txt -out aes.bin -K ddf -iv 345 

done 

结果:

$ time ./rsa_enc 
real 0m3.697s 
user 0m1.308s 
sys  0m0.680s 

$ time ./rsa_dec 
real 0m14.273s 
user 0m3.172s 
sys  0m0.696s 

$ time ./aes 

real 0m3.790s 
user 0m1.408s 
sys  0m0.500s 

它表明RSA加密更快然后AES加密。

AES不应该更快?我做错了什么吗?

谢谢。

+0

我不相信你的数字,但你可能会试着计算一下nop,看看你的定时循环有多少开销。 –

回答

3

为什么重要的是哪一个更快。你真的不能用它们来做同样的事情。 RSA只能加密一个very small amount of data

但是,一般情况下,如果您需要使用RSA对大量内容进行加密,则可以使用它对随机AES密钥进行加密,然后执行明文,但基于块大小和解密速度而不是加密速度,这更多是出于安全原因。

5

除了jbtule关于RSA和AES加密的不同目的的正确观点之外,在基准测试的设计中还存在一些根本性的缺陷。

你在这里测量的不仅仅是一个RSA或AES加密程序,而是这些openssl命令的全部执行。

虽然在外部程序之外使用定时器来测量其中一个函数的执行情况是有意义的,但这么做需要花费时间去做其他事情(比如解析命令行参数,找到正确的OpenSSL子模块,打开文件,读取文件)与执行定时功能所需的时间相比可以忽略不计。

在这里,显然不是这种情况,尤其是对于如此短的测试消息。