Python Brute Force算法

Mad*_*han 20 python algorithm brute-force

我需要生成从给定字符集到给定范围的所有可能组合.喜欢,

charset=list(map(str,"abcdefghijklmnopqrstuvwxyz"))
range=10
Run Code Online (Sandbox Code Playgroud)

输出应该是,

[a,b,c,d..................,zzzzzzzzzy,zzzzzzzzzz]
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用已经使用过的库来做到这一点.但我需要知道它们是如何工作的.如果有人能用Python或任何可编程语言给我一个这种算法的注释代码,我将非常感激.

Mar*_*ers 49

使用itertools.product,结合使用itertools.chain各种长度:

from itertools import chain, product
def bruteforce(charset, maxlength):
    return (''.join(candidate)
        for candidate in chain.from_iterable(product(charset, repeat=i)
        for i in range(1, maxlength + 1)))
Run Code Online (Sandbox Code Playgroud)

示范:

>>> list(bruteforce('abcde', 2))
['a', 'b', 'c', 'd', 'e', 'aa', 'ab', 'ac', 'ad', 'ae', 'ba', 'bb', 'bc', 'bd', 'be', 'ca', 'cb', 'cc', 'cd', 'ce', 'da', 'db', 'dc', 'dd', 'de', 'ea', 'eb', 'ec', 'ed', 'ee']
Run Code Online (Sandbox Code Playgroud)

这将有效地使用输入集生成逐渐变大的单词,最大长度为maxlength.

试图产生的26个字符的最大长度是10的内存中的列表; 相反,迭代生成的结果:

for attempt in bruteforce(string.ascii_lowercase, 10):
    # match it against your password, or whatever
    if matched:
        break
Run Code Online (Sandbox Code Playgroud)

  • @Madushan:说实话,你选择的答案不是我给老师看的代码. (3认同)

Rob*_*man 21

如果你真的想暴力破解它,试试这个,但它会花费你一个荒谬的时间:

your_list = 'abcdefghijklmnopqrstuvwxyz'
complete_list = []
for current in xrange(10):
    a = [i for i in your_list]
    for y in xrange(current):
        a = [x+i for i in your_list for x in a]
    complete_list = complete_list+a
Run Code Online (Sandbox Code Playgroud)

在一个较小的例子中,list ='ab',我们只有5,这将打印以下内容:

['a', 'b', 'aa', 'ba', 'ab', 'bb', 'aaa', 'baa', 'aba', 'bba', 'aab', 'bab', 'abb', 'bbb', 'aaaa', 'baaa', 'abaa', 'bbaa', 'aaba', 'baba', 'abba', 'bbba', 'aaab', 'baab', 'abab', 'bbab', 'aabb', 'babb', 'abbb', 'bbbb', 'aaaaa', 'baaaa', 'abaaa', 'bbaaa', 'aabaa', 'babaa', 'abbaa', 'bbbaa', 'aaaba','baaba', 'ababa', 'bbaba', 'aabba', 'babba', 'abbba', 'bbbba', 'aaaab', 'baaab', 'abaab', 'bbaab', 'aabab', 'babab', 'abbab', 'bbbab', 'aaabb', 'baabb', 'ababb', 'bbabb', 'aabbb', 'babbb', 'abbbb', 'bbbbb']
Run Code Online (Sandbox Code Playgroud)

  • 而且,通过*荒谬的时间*你的意思是它是难以处理的,并且在它完成之前会死于内存,对吧? (16认同)
  • 除非您的计算机具有超过4410270千兆字节的内存,否则它也会崩溃. (14认同)

小智 5

我找到了另一种使用 itertools 创建字典的非常简单的方法。

generator=itertools.combinations_with_replacement('abcd', 4 )
Run Code Online (Sandbox Code Playgroud)

这将遍历 'a'、'b'、'c' 和 'd' 的所有组合,并创建总长度为 1 到 4 的组合。即。a,b,c,d,aa,ab.........,dddc,dddd。generator 是一个 itertool 对象,你可以像这样正常循环,

for password in generator:
        ''.join(password)
Run Code Online (Sandbox Code Playgroud)

每个密码实际上都是元组类型,您可以像往常一样处理它们。