关于Python:Python – 如何从特定长度的给定字符生成wordlist

Python - how to generate wordlist from given characters of specific length

我想执行字典攻击,为此我需要单词表。如何从特定长度的给定字符(或从最小长度到最大长度的单词长度)生成单词列表?我试过itertools.combinations_with_replacementsitertools.permutations,但没用。他们没有所有应该返回的单词表。任何帮助都将不胜感激。谢谢您。


使用itertools.product

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> import itertools
>>>
>>> chrs = 'abc'
>>> n = 2
>>>
>>> for xs in itertools.product(chrs, repeat=n):
...     print ''.join(xs)
...
aa
ab
ac
ba
bb
bc
ca
cb
cc

从最小长度到最大长度获取单词:

1
2
3
4
5
chrs = 'abc'
min_length, max_length = 2, 5    
for n in range(min_length, max_length+1):
    for xs in itertools.product(chrs, repeat=n):
        print ''.join(xs)


这是NA?ve实施:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
list='abcdefg'
depth=8

def generate(l,d):
  if d<1:
    return
  for c in l:
    if d==1:
      yield c
    else:
      for k in generate(l,d-1):
        yield c+k

for d in range(1,depth):
  for c in generate(list,d):
    print c

我还没有足够的声誉来发表评论,因此,根据上面的itertools示例制作完整的列表:

1
2
3
4
5
6
import itertools
chrs='abc'
n=6
for i in range(1,n):
  for xs in itertools.product(chrs, repeat=i):
    print ''.join(xs)

这样,列表中所有单词的长度从1到n不等。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
from itertools import product

def allwords(chars, length):
    for letters in product(chars, repeat=length):
        yield ''.join(letters)

def main():
    letters ="abc"
    for wordlen in range(3, 5):
        for word in allwords(letters, wordlen):
            print(word)

if __name__=="__main__":
    main()

退货

1
2
3
4
5
6
7
8
9
10
11
12
aaa
aab
aac
aba
abb

...

ccbc
ccca
cccb
cccc


def word_gen(开始=3,结束=3,元素=1):"hud seidu daanna单词表gen信息安全理学硕士,CEH"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
README
#for start&end
#e.g. start= 3,end= 3
#means first words to last words should be 3 characters

#for elements
1 is asci
2 is numbers
3 is asci&numbers
"""
import itertools
#types of elements
if elements ==1: elements= 'abcdefghijklmnopqrstuvwxyx'
if elements ==2: elements= '0123456789'
if elements== 3: elements= 'abcdefghijklmnopqrstuvwxyx0123456789'
else: pass
wl = []
for i in range(start,end+1):
    for xs in itertools.product(elements, repeat=i):
        wl.append(''.join(xs))
return wl