Saltar al contenido

Algoritmo de fuerza bruta de Python

Tenemos el arreglo a este conflicto, o por lo menos eso creemos. Si presentas alguna pregunta coméntalo, para nosotros será un placer ayudarte

Solución:

Usar itertools.productcombinado con itertools.chain para juntar las distintas longitudes:

from itertools import chain, product
def bruteforce(charset, maxlength):
    return (''.join(candidate)
        for candidate in chain.from_iterable(product(charset, repeat=i)
        for i in range(1, maxlength + 1)))

Demostración:

>>> list(bruteforce('abcde', 2))
['a', 'b', 'c', 'd', 'e', 'aa', 'ab', 'ac', 'ad', 'ae', 'ba', 'bb', 'bc', 'bd', 'be', 'ca', 'cb', 'cc', 'cd', 'ce', 'da', 'db', 'dc', 'dd', 'de', 'ea', 'eb', 'ec', 'ed', 'ee']

Esto producirá de manera eficiente palabras progresivamente más grandes con los conjuntos de entrada, hasta la longitud máxima.

Hacer no intente producir una lista en memoria de 26 caracteres hasta 10 de longitud; en su lugar, iterar sobre los resultados producidos:

for attempt in bruteforce(string.ascii_lowercase, 10):
    # match it against your password, or whatever
    if matched:
        break

Si REALMENTE quieres usar la fuerza bruta, prueba esto, pero te llevará una cantidad ridícula de tiempo:

your_list = 'abcdefghijklmnopqrstuvwxyz'
complete_list = []
for current in xrange(10):
    a = [i for i in your_list]
    for y in xrange(current):
        a = [x+i for i in your_list for x in a]
    complete_list = complete_list+a

En un ejemplo más pequeño, donde list = ‘ab’ y solo subimos a 5, esto imprime lo siguiente:

['a', 'b', 'aa', 'ba', 'ab', 'bb', 'aaa', 'baa', 'aba', 'bba', 'aab', 'bab', 'abb', 'bbb', 'aaaa', 'baaa', 'abaa', 'bbaa', 'aaba', 'baba', 'abba', 'bbba', 'aaab', 'baab', 'abab', 'bbab', 'aabb', 'babb', 'abbb', 'bbbb', 'aaaaa', 'baaaa', 'abaaa', 'bbaaa', 'aabaa', 'babaa', 'abbaa', 'bbbaa', 'aaaba','baaba', 'ababa', 'bbaba', 'aabba', 'babba', 'abbba', 'bbbba', 'aaaab', 'baaab', 'abaab', 'bbaab', 'aabab', 'babab', 'abbab', 'bbbab', 'aaabb', 'baabb', 'ababb', 'bbabb', 'aabbb', 'babbb', 'abbbb', 'bbbbb']

Encontré otra manera muy fácil de crear diccionarios usando itertools.

generator=itertools.combinations_with_replacement('abcd', 4 )

Esto iterará a través de todas las combinaciones de ‘a’, ‘b’, ‘c’ y ‘d’ y creará combinaciones con una longitud total de 1 a 4. es decir. a,b,c,d,aa,ab………,dddc,dddd. El generador es un objeto de itertool y puede recorrerlo normalmente de esta manera,

for password in generator:
        ''.join(password)

Cada contraseña es de hecho de tipo tupla y puede trabajar en ellas como lo hace normalmente.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *