如何跟踪以蛮力方法尝试了哪些组合?

Posted

技术标签:

【中文标题】如何跟踪以蛮力方法尝试了哪些组合?【英文标题】:How can I keep track of what combinations have been tried in a brute force approach? 【发布时间】:2020-02-10 19:17:09 【问题描述】:

我正在使用 Python 3 创建强力 Vigenere 解密器。 Vigenere 代码基本上是把一串字母加在一起。

我希望我的代码工作的方式是用户输入他们想要的任何键(这已经完成),字母变成他们的数字(也完成)然后它将每对键加在一起(处理这个,也是我需要帮助的)并打印出这两个键以及它们添加的内容。

为此,我需要能够跟踪已将哪些密钥对添加在一起。我该怎么做?

顺便说一句,我当前的代码是这样的。我在解码和编程练习中都这样做,所以我真的只是想要跟踪添加的密钥对的方法,而不是整个程序。

#defines start variables
import math
alph = "abcdefghijklmnopqrstuvwxyz"
keyqty = int(input("how many keys?"))
listofkeys = []
listofindex = []
timer = 0

#gets keys
while True:
    if timer >= keyqty:
        break
    else:
        pass
    listofkeys.append(input("key: ").lower())
    timer += 1
tempkey = ""

#blank before key 
for item in listofkeys:
    listofindex.append("")
    for letter in item:
        listofindex.append(alph.find(letter)

timer = 0
newkey = False
key1index = []
key2index = []
endex = []
printletter = ""
doneadds = []

显然,它还需要一些其他的工作,但我们将不胜感激。

【问题讨论】:

您能否举一个涉及输入与预期操作的简单示例?即如果用户输入 X,程序应该尝试以下组合:... 使用集合来跟踪对。 Gillespie,它驯服了用户添加的所有键并将那些键添加到一起 【参考方案1】:

您可以使用集合进行快速查找(摊销常数时间)。

tried = set()
for ...
   if word not in tried:
       try()
       tried.add(word)

或使用itertools.product() 生成您的试验,而无需跟踪已尝试的试验。

for password in itertools.product(alph, repeat=keyqty):
   try(password)

【讨论】:

以上是关于如何跟踪以蛮力方法尝试了哪些组合?的主要内容,如果未能解决你的问题,请参考以下文章

建立一个数据库来跟踪哪些用户点击了哪些链接?

如何跟踪哪些表已/已被修改

跟踪 Oracle API 执行

如何在 C 中跟踪函数调用?

如何在 SQL Server 中找到正在运行的跟踪?

液化石油气。如何跟踪存储过程更改