如何使用RSA?

How to use RSA?

我正在尝试使用 RSA 加密我在 Python 中的数据。

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

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

我尝试用这些密钥加密一个小值 (10),它成功了。但问题是需要很长时间才能做到。 例如,我通过使用大密钥和长字符串将它与 openssl 进行了比较,并且它在一秒钟内工作。 我知道还有第三个使用 RSA 的库(不是它们的忠实粉丝)。 我正在尝试使用这种方法来加密我将要发送到服务器的数据,它应该在一秒钟内完成 我该怎么做?

我想总的来说,您关于性能的问题在这里得到了解答。 wikipedia : modular exponentiation

文章描述

  • 直接求幂
  • 内存高效求幂
  • 二进制求幂

直接取幂

求 e 次方并取模。 这很简单,但是模前数的大小非常大。

内存高效求幂

用乘以 e 次代替幂运算,允许累加结果始终在模数范围内。这限制了 bignum 的大小并加快了操作速度。

二进制求幂

如果将幂转换为二进制数

如果 e = 13 => 1101 pow(n, 13) = pow(n, 8) * pow(n,4) * pow(n, 1) 那么对于m位的指数,那么大约只需要进行m次运算。

结合内存效率和二进制求幂解决了大部分性能问题。

Python 使用 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 个参数版本需要 .06 秒,而 pow 的第 2 个参数版本需要 15 秒。