Python 3.x Python 3中的暴力黑客概念

Python 3.x Python 3中的暴力黑客概念,python-3.x,Python 3.x,我目前拥有的代码将列出所有可能的组合 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_at

我目前拥有的代码将列出所有可能的组合

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))

我需要它做的是将每次尝试与变量“password”进行比较,如果它与for循环中的break out相匹配,还有什么想法吗?

要解决这个问题,可以将整个for-length-in-range代码块移动到一个函数中:

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


这不一定是个问题,但您现在使用的chars只能强制使用全字母、全小写字符串,因此每次尝试都会失败,如果密码为“Hr”。

您的第5行不正确,它应该为
if'。加入(尝试)==密码:
按原密码。@phantom您能稍微解释一下吗?对于任何字符串,a=''.join(a)。为什么要这样做而不是尝试==password?因为变量
trunt
不是两个字符的密码,它是一个单个字符。@phantom不,它不是。他不是迭代字符串,而是迭代itertools.product生成器生成的每个项。如果他有另一个for循环,读为尝试中的字母,你是对的,但他不坚持我告诉你的改变,它坚持。