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

20,521

Solution 1

Use itertools.product:

>>> 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

To get word from min length to max length:

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)

Solution 2

This is a naïve implementation:

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

I don't have enough reputation to comment yet, so, to make a full list based on the itertools sample above:

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

This way, you have all words from length 1 up to n in your list.

Solution 3

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()

returns

aaa
aab
aac
aba
abb

...

ccbc
ccca
cccb
cccc    
Share:
20,521

Related videos on Youtube

Aamu
Author by

Aamu

Updated on July 05, 2022

Comments

  • Aamu
    Aamu almost 2 years

    I want to perform a dictionary attack and for that I need word lists. How to generate word list from given characters of specific length ( or word length from min length to max length )? I have tried itertools.combinations_with_replacements and itertools.permutations, but it does not help. They does not have all the word lists that it should return. Any help will be greatly appreciated. Thank you.

    • ThiefMaster
      ThiefMaster about 10 years
      I don't think you understand the concept behind a dictionary attack. The idea is to NOT generate all possible combinations (there are A LOT) but to use a file containing actual dictionary words (and other words that are likely passwords).

Related