如何跟踪以蛮力方法尝试了哪些组合?
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)
【讨论】:
以上是关于如何跟踪以蛮力方法尝试了哪些组合?的主要内容,如果未能解决你的问题,请参考以下文章