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

Is it possible to loop through 10^8 possibilities to determine the correct answer?

我有一个 615 位长的号码。纵观其中,有8处数字缺失。我必须找出数字是什么。有 10^8 种可能性。

这是一个RSA问题。有问题的数字是私钥,我正试图找出它是什么。为了帮助我,我有 public 密钥对 (n, e),它们都是 615 位长,还有明文和相应的密文。

所以找出 d 的唯一方法就是暴力破解它。我正在尝试在 python 中使用 gmpy2 来解决这个问题。我不得不跳过很多障碍才能让它发挥作用。我什至不知道我是否正确地做到了。我必须下载 Python2.7 这样我才能 运行 gmpy2 安装程序只是为了不收到错误消息。但我认为它现在可以工作了,因为我可以输入

>>>import gmpy2

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

在我尝试遍历 10^8 种可能性之前,我想知道考虑到我的情况,是否可以在相对较短的时间内这样做。我不想炸毁我的电脑或冻结它来计算这个。我还想知道我是否为此使用了正确的工具,或者 gmpy2 的版本不正确,或者 Python2.7 不够 good/fast。我在笔记本电脑上 运行ning gmpy2 on Python2.7。

最后我想我想得到所有 10^8 个答案并提出 C^d = M mod n。所以这是一个(已经)很大的数字的 615 位长的幂,10^8 倍。这可能吗?如果是,我如何使用 gmpy2 执行此操作?有没有更有效的方法来计算这个?

如果在这里提问不合适,我深表歉意。感谢您的帮助。

你不会烧坏你的电脑的。

到运行可能需要很长时间,但看起来这是一个直接的O(n)问题,所以它不会爆炸到无穷大。只要检查一个哈希值是否有效不需要花费大量时间,这甚至可能需要不到一分钟的时间 运行。现代机器以 GHz 为单位测量时钟周期。那是每秒 10^9 个周期。此外,既然你说你不能从错误的猜测中推断出正确答案是什么,那么蛮力似乎是唯一的解决办法。

我是 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 倍。