我正在尝试在Python中使用密码破解程序作为练习,并且我注意到它平均需要586,634次迭代来破解密码“嘿”。我认为它太高了,因为它可以自由生成一个可能已经被检查的随机字符串。例如,当它已经发现它不起作用时,它可以生成以下内容并使用额外的时间。
a!?
,h[j
,jpc
,o$w
, 01g
,{{1 }, a5b
, a!?
那么如何阻止Python反复生成相同的字符串?
这是我的代码(它生成的长度由输入的长度决定):
01g
答案 0 :(得分:1)
试一试。它生成所有可能的3个字母组合。你可以用你想要的长度替换2。另请注意,我将product
生成的迭代器转换为list
。如果你只需要循环一次,最好不要先将它转换为list
,因为这会占用更多的内存。只需摆脱list()
函数调用。
import itertools
import string
letters = string.lowercase + string.uppercase + string.punctuation + string.digits
all_possible = list(itertools.product(letters, repeat=3))
test_pws = ['hey', 'h9!', '!!!']
for i,possible_pw in enumerate(all_possible):
pw = "".join(possible_pw)
if pw in test_pws:
print 'Found ', pw, ' at iteration ', i
print all_possible[:5]
print len(all_possible)
print len(set(all_possible))
print all_possible[-5:]
Found hey at iteration 62252
Found h9! at iteration 70646
Found !!! at iteration 464412
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'a', 'c'), ('a', 'a', 'd'), ('a', 'a', 'e')]
830584
830584
[('9', '9', '5'), ('9', '9', '6'), ('9', '9', '7'), ('9', '9', '8'), ('9', '9', '9')]