随机Brute Forcer

时间:2015-10-23 15:18:19

标签: python python-3.x random brute-force

出于教育目的,我制作了一个简单的Brute Forcer。由于它的工作原理,我早期获得结果的可能性非常小。也就是说,我想在没有重复的情况下随机化结果,并且不会大幅减慢结果。

目前的代码:

from threading import Thread

charset = (
        'abcdefghijklmnopqrstuvwxyz'
        '1234567890'
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
)

def recurse(width, position, base_string):
    for i in range(len(charset)):
        if position < (width - 1):
            Thread(target=recurse(width, position+1,base_string+charset[i])).start()
        Thread(target=write_content(base_string+charset[i]+'\n')).start()

def write_content(content):
    with open('permutations', 'a+') as f:
            f.write(content)

if __name__ == '__main__':
    recurse(15,0,'')

我的目标是让我的结果随机化。所以而不是:

aaa
aab
aac
aba
...
cbc
cca
ccb
ccc

我得到的结论是:

aaa
bac
cba
abc
bbc
ccc
...

我该怎么做?我已经考虑了一段时间而且无法解决这个问题。

另外,哪种语言最快处理?

2 个答案:

答案 0 :(得分:0)

你有charset,一个你想要选择的字符列表,那么为什么不从这个集合中选择一个随机字符呢?使用python的random 模块应该让你相当容易地做到这一点。

如果您在每个步骤的字符串字符集中选择一个随机索引,它应该具有您正在寻找的效果。

编辑:我意识到我没有回答你问题的第二部分 - 我建议创建一个已经检查过的字符串列表。在每次尝试之后(即在每个随机生成的字符串之后),您可以将字符串添加到所述列表中。然后,当您生成一个新字符串时,请根据此列表进行检查,以确保它没有再次使用。

如果您将字符串添加到'used'列表中以使其排序(如insertion sort),则可以使用a来加快速度。如果您按照这些步骤操作,则应该为更长的字符串/更长的检查集节省大量时间。

答案 1 :(得分:-1)

查看itertools module以及random.shuffle

NSAllowsArbitraryLoads

这将生成长度为3的所有排列,因此随着长度的增长,它将显着变慢。长度3在我的机器上几乎是即时的,长度为
5产生了一个内存错误:-)