我试图使用RSA在Python中加密数据。
我创建了两个小(私钥和公钥)
e : 14918179 N : 15372757
D : 7495819 N : 15372757
我试图用那些密钥加密一个小值(10),并且它起作用了。但是问题在于这需要很长时间。 例如,我通过使用大键和长字符串将其与openssl进行了比较,并且在一秒钟内就可以正常工作。 而且我知道还有第三个使用RSA的库(不是他们的忠实拥护者)。 我正在尝试使用此方法来加密将要发送到服务器的数据,它应该在一秒钟内完成 我该怎么办?
答案 0 :(得分:1)
我认为,总体而言,您对性能的问题已在此处得到解答。 wikipedia : modular exponentiation
本文介绍
提高到幂e并取模。 这很简单,但是pre modulo的数量很大。
将幂运算替换为e倍,可使累加结果始终在模范围内。这样可以限制bignum
的大小并加快操作速度。
如果将幂转换为二进制数
如果e = 13 => 1101 pow(n,13)= pow(n,8)* pow(n,4)* pow(n,1) 因此,对于m位指数,则只需执行大约m次操作。
将内存效率和二进制指数相结合可以解决大部分性能问题。
Python使用3自变量幂函数(例如3)提供了这些改进的实现。
>>> import timeit
>>> t = timeit.Timer( 'print(pow( 10,14918179, 15372757))' )
>>> t.timeit(1)
10140931
0.06365180000000237
>>> u = timeit.Timer( 'print(pow( 10,14918179) % 15372757)' )
>>> u.timeit(1)
10140931
15.021656000000007
pow
的3参数需要0.06s,而pow
的2参数版本需要15秒。