出于教育目的,我制作了一个简单的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
...
我该怎么做?我已经考虑了一段时间而且无法解决这个问题。
另外,哪种语言最快处理?
答案 0 :(得分:0)
你有charset,一个你想要选择的字符列表,那么为什么不从这个集合中选择一个随机字符呢?使用python的random 模块应该让你相当容易地做到这一点。
如果您在每个步骤的字符串字符集中选择一个随机索引,它应该具有您正在寻找的效果。
编辑:我意识到我没有回答你问题的第二部分 - 我建议创建一个已经检查过的字符串列表。在每次尝试之后(即在每个随机生成的字符串之后),您可以将字符串添加到所述列表中。然后,当您生成一个新字符串时,请根据此列表进行检查,以确保它没有再次使用。
如果您将字符串添加到'used'列表中以使其排序(如insertion sort),则可以使用a来加快速度。如果您按照这些步骤操作,则应该为更长的字符串/更长的检查集节省大量时间。
答案 1 :(得分:-1)
查看itertools module以及random.shuffle
NSAllowsArbitraryLoads
这将生成长度为3的所有排列,因此随着长度的增长,它将显着变慢。长度3在我的机器上几乎是即时的,长度为
5产生了一个内存错误:-)