我试图用ubuntu中的openssl来测试RSA和AES的速度。
我使用以下代码进行测试。
echo -n "0123456789012345" > 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 :(得分:5)
除了@jbtule关于RSA和AES加密的不同目的的正确观点之外,基准设计中存在一些根本性的缺陷。
您在此处测量的不仅仅是RSA或AES加密例程,而是整个执行这些openssl
命令。
虽然在外部程序之外使用定时器来衡量其中一个函数的执行情况是有意义的,但这样做需要花费时间来做其他事情(比如解析命令行参数,找到正确的OpenSSL子模块,打开文件,读取文件)与执行定时功能所需的时间相比可以忽略不计。
在这里,情况显然不是这样,特别是在这么短的测试信息的情况下。
答案 1 :(得分:3)
为什么哪一个更快更重要。你真的不能用它们做同样的事情。 RSA只能加密very small amount of data。
但一般来说,如果你需要使用RSA加密一些大的东西,你可以使用它加密一个随机的AES密钥,然后用来做你的明文,但是出于安全考虑,更多的是基于块大小和解密速度而不是加密速度。