如何使用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 秒。
我正在尝试使用 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 秒。