是否可以遍历10 ^ 8种可能性来确定正确的答案?

时间:2019-04-09 12:46:48

标签: python gmpy

我有一个615位数字的数字。在整个过程中,有8个地方缺少数字。我必须找出数字是多少。有10 ^ 8的可能性。

它用于RSA问题。有问题的数字是私钥,我正在尝试找出它的含义。为了帮助我,我有一对公钥对(n,e),两者也都是615位数字,还包括明文和相应的密文。

所以找出d的唯一方法是蛮力地将其破解。我试图在python中使用gmpy2来解决它。为了使它正常工作,我不得不跳很多圈。我什至不知道我是否正确地做到了。我必须下载Python2.7,因此我可以运行gmpy2安装程序,只是不会收到错误消息。但是我认为它现在可以正常工作,因为我可以输入

>>>import gmpy2

在终端,它并没有给我一个错误。

在尝试遍历10 ^ 8种可能性之前,我想知道是否有可能在较短的时间内考虑到我的情况。我不想油炸计算机或冻结计算机以进行计算。我还想知道我是否为此使用了正确的工具,或者gmpy2不是正确的版本,或者Python2.7不够好/不够快。我在笔记本电脑上的Python2.7上运行gmpy2。

最后,我想我想把所有10 ^ 8个答案都加起来,使C ^ d = M mod n。因此,这是一个(已经)很大的数字,达到615位数字的幂,为10 ^ 8倍。这可能吗?如果是,该如何使用gmpy2做到这一点?有没有更有效的方法来计算?

如果这不是问这个地方的正确地点,我深表歉意。谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您不会炸计算机。

可能要花很长时间才能运行,但这似乎是一个直接的O(n)问题,因此不会爆炸到无穷大。只要不花大量时间检查一个散列是否有效,这甚至可能需要不到一分钟的时间来运行。现代机器以gHz为单位测量时钟周期。每秒10 ^ 9个周期。此外,由于您说无法从错误的猜测中推断出正确答案,因此蛮力似乎是唯一的解决方案。

答案 1 :(得分:0)

我是gmpy2的维护者。

要计算C ** d mod n,应使用内置的pow()并指定所有三个值。 pow(C,d,n)将比C**d % n快得多。

使用gmpy2应该很容易。无需使用int()将字符串转换为Python整数,只需使用gmpy2.mpz()。您可以将pow()mpz实例一起使用。 (并且即使pow()的三个值之一是mpzgmpy2也将用于计算。)

我估计gmpy2的运行时间范围从不到一个小时到几个小时。 Python的本机整数可能慢10倍。