我目前拥有的代码将列出所有可能的组合
from itertools import product
password = "hr"
chars = 'abcdefghijklmnopqrstuvwxyz' #characters to look for, can have letters added
for length in range(1, 3): #only do lengths of 1 + 2 - namely from aa - zz not onto aaa
to_attempt = product(chars, repeat=length)
for attempt in to_attempt:
print(''.join(attempt))
我需要它做的是尝试每次尝试并将其与变量"密码"进行比较,如果它与for循环相匹配则继续进行,任何想法?
答案 0 :(得分:1)
你可以做的一件事就是将范围代码块中的整个长度移动到一个函数中:
def brute_force(chars, password):
for length in range(1, 3): #only do lengths of 1 + 2 - namely from aa - zz not onto aaa
to_attempt = product(chars, repeat=length)
for attempt in to_attempt:
if ''.join(attempt) == password:
print("Found the password!")
return
你遇到的问题是你只能打破一个循环。没有内置的解决方案可以说“打破这个循环,它的父级,没有别的。”我发现,如果您无法使用break或继续沿所需方向移动控制流,只需将其分解为函数并使用return。
这不是一个真正的问题,但是,你现在正在使用的字符只能强制使用全字母,全小写的字符串,所以它会经历每一个字母如果密码为“Hr”,则尝试失败。