为什么PyCryptodome RSA公钥生成如此之慢?

时间:2018-05-22 23:44:49

标签: pycryptodome

我正在使用PyCryptodome libray来完成我的加密任务。我想生成RSA密钥,如example所示。

我输入了以下代码:

from Cryptodome.PublicKey import RSA
key = RSA.generate(2048)

并且需要永远执行。 (在输入此问题时,它已经过了10分钟,但仍未完成)。

我在Windows 10上的Jupyter Notebook中运行它。您是否知道为什么它如此缓慢或如何使其工作?我已阅读文档并试图找到类似的问题,但没有任何成功。

3 个答案:

答案 0 :(得分:1)

pycryptodome似乎有一个错误。 primality测试miller_rabin_test在候选整数上调用is_even,该整数错误地始终返回true,从而导致永无止境的循环。 我用

替换了site-packages / Cryptodome / Math / _Numbers_gmp.py中的第579行
def is_even(self):
    return (int(self) & 1)==0        
    #return _gmp.mpz_tstbit(self._mpz_p, 0) == 0 #Old non-functional line of code.

在这里测试并工作。

答案 1 :(得分:0)

对于使用Windows 7 64位的普通笔记本电脑,我只需不到一秒钟(平均而言)。

您确定使用的是最新版本的pycryptodomex软件包(3.6.1)吗?

在早期版本中,您必须安装一个单独的优化数值库(MPIR)才能获得不错的性能:替代方案基于纯Python,而且确实非常慢。

答案 2 :(得分:0)

我已将Anaconda重新安装到最新版本,这次我通过pip安装了pycryptodomex(如github所示),之前我通过Anaconda云安装它(我认为这没关系,但让它留在这里,只是为了确定)