如何使用RSA?

时间:2019-05-06 06:46:31

标签: python encryption rsa public-key-encryption private-key

我试图使用RSA在Python中加密数据。

我创建了两个小(私钥和公钥)

e : 14918179  N : 15372757
D : 7495819   N : 15372757

我试图用那些密钥加密一个小值(10),并且它起作用了。但是问题在于这需要很长时间。 例如,我通过使用大键和长字符串将其与openssl进行了比较,并且在一秒钟内就可以正常工作。 而且我知道还有第三个使用RSA的库(不是他们的忠实拥护者)。 我正在尝试使用此方法来加密将要发送到服务器的数据,它应该在一秒钟内完成 我该怎么办?

1 个答案:

答案 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秒。