2014-11-01 43 views
1

,我现在有将列出所有可能的组合蛮力黑客概念在Python 3

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循环其他进行,任何想法?

回答

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”则失败。

+0

你的第5行不正确,它应该读取'if''.join(attempt)== password:'按照原始代码。 – phantom 2014-11-01 20:44:10

+0

@phantom你能稍微解释一下吗?对于任何字符串,==''.join(a)。你为什么要这样做,而不是尝试==密码? – furkle 2014-11-01 20:46:17

+0

因为变量'attempt'不是两个字符的密码,所以它是单个字符。 – phantom 2014-11-01 20:52:27