geração de lista de palavras crunch com todas as combinações

0

Estou tentando gerar uma lista de palavras para usá-la para forçar o meu próprio contêiner Truecrypt. Eu sei partes da senha, é construído usando blocos de outras senhas conhecidas para aumentar o tamanho, mas eu esqueci em qual ordem os blocos foram usados e se alguns blocos não foram usados.

Exemplo de "blocos" separados por espaço: dog cat bird xyz cow1 lion8

O que eu gostaria de fazer é criar uma lista de palavras contendo cada combinação possível desses blocos. Por exemplo,

dog
cat
dogcat
catdog
bird
dogbird
catbird
birdcat
birddog
dogcatbird
catdogbird
xyz
dogcatbirdxyz
cow1
xyzcow1dogcat
xyzcow1dogcatbird
catdogbirdxyzcow8
lion8
catdogbirdxyzcow1lion8
lion8catdogbirdxyzcow1
dogcatbirdxyzcow1lion8
cow1birddogcatxyzlion8
cow1lion8birddogcatxyz
...
Até agora eu tentei utilizar uma ferramenta chamada crunch:

Mas o desafio parece ser como se deve gerar combinações de combinações mais curtas, não incluindo todos os blocos conhecidos, exemplo: dogcat inclui apenas 2 blocos.

Talvez alguém conheça crunch melhor que eu ou use outra ferramenta ou combinação de ferramentas?

    
por NiklasJ 19.04.2018 / 08:36

1 resposta

1

Com Python ,

#! /usr/bin/env python3
import sys
from itertools import chain, permutations
# from the docs https://docs.python.org/3/library/itertools.html#itertools-recipes
# modified for permutations instead of combinations


def powerset_perm(iterable):
    s = list(iterable)
    return chain.from_iterable(permutations(s, r) for r in range(1, len(s) + 1))


for w in powerset_perm(sys.argv[1:]):
    print("".join(w))

Exemplo:

~ ./foo.py foo フー bar1™
foo
フー
bar1™
fooフー
foobar1™
フーfoo
フーbar1™
bar1™foo
bar1™フー
fooフーbar1™
foobar1™フー
フーfoobar1™
フーbar1™foo
bar1™fooフー
bar1™フーfoo
    
por 19.04.2018 / 08:58