【发布时间】:2019-04-10 14:51:59
【问题描述】:
我有一个长度为 615 位的号码。在整个数字中,有 8 个固定位置缺少一个数字。我必须找出那些缺失的数字是什么。所以有 10^8 种可能性。在计算它们之后,我必须为每个可能的数字提出一个密文,并查看输出是什么(mod N),并查看哪个数字给出了正确的输出。换句话说,我试图在 RSA 问题中找到解密密钥。我现在主要关心的是如何有效/正确地创建所有 10^8 个可能的答案。
我正在使用 gmpy2,为了让它工作,我必须下载 Python2.7,以免在尝试安装 gmpy2 时出错。我希望它们足以解决这个问题。如果没有,我将非常感谢有人指出我正确的方向。
我还没有尝试过任何东西,因为我确信这需要几个小时来计算。所以我真的想确保我做的一切都是正确的,这样如果我让我的笔记本电脑运行几个小时,我不会弄乱内部,也不会冻结,我会坐在这里不知道我的笔记本电脑是否搞砸了,或者如果它仍在计算。
所以我想我正在尝试就如何进一步进行寻求建议。
就实际代码而言,我认为循环 0-9 8 次并不难,但我不知道如何将一个数字转换为另一个数字。在 Python 中,如何使数字仅插入到我需要的位置?数字看起来像这个例子:
X = 124621431523_13532535_62635292 //this is only 30 digits long, mine is 615 digits long
每个“_”是缺少数字的地方。
我完全不知道如何做到这一点。
一旦生成了所有数字,我的目标是遍历它们并提高它们,直到我得到所需的答案。这部分似乎更容易一些,因为它看起来只是一个简单的循环。
所以我想我的主要问题是如何循环遍历 10^8 个数字,但将它们放置在一个已经 615 位长的数字内的特定位置?我正在寻求技术和代码设计方面的建议,以免花费太长时间来生成它们。
感谢您的阅读。
【问题讨论】:
-
你知道数字在哪一点“缺失”。如果这样做,您可以假设这些数字为零。然后创建一个长度为 8 的数组
arr。数组的第 N 个元素是您想要在第 N 位上尝试的 0-9 之间的数字。如果第 N 位在位置 M,则 X = X + 10^M 其中 M 从最低有效位开始计为 0。然后你需要生成所有可能的 arr 排列,遍历它们,并检查它是否解决了密码 -
关键是
x**(a+b) mod N可以分解为x**a * x**b mod N,所以你只需要做一个带零的a,然后为每个bs做一些工作