Skip to content
Advertisement

Python – Brute force generator

I’ve made a brute force password cracker which works, but I also made a string combining generator which would be better as the brute force string generator; however I can’t figure out how to combine the two.

Brute force code:

import random

characters = "ABCDE"
length = 5
while True:
    pw = ""

   #Generating Section
    for i in range(length):
        next_index = random.randrange(len(characters))
        pw = pw + characters[next_index]

    if pw == "ABCDE":
        print()
        print()
        print("Password acquired.")
        break

Character generator code:

import itertools

res = itertools.permutations(test ,length)
for i in res: 
    print(''.join(i))

I would like to replace the “Generating” section from the brute force code with the improved generator code but I can’t do this. Please help.

Advertisement

Answer

I changed your code to use itertools and to iterate through the possible passwords using a generator so you aren’t computing more than needed.

import itertools

characters = "ABCDE"
length = 5
done = False

while True:
    def pw_guess():
        res = itertools.permutations('ABCDE' ,5)
        for guess in res:
            yield guess

    #Make generator object
    guess_generator = pw_guess()

    for guess in guess_generator:
         if guess == ('A', 'B', 'C', 'D', 'E'):
            print()
            print("Password acquired: " + str(guess))
            done = True
            break
    if done:
        break

A generator computes the guesses one by one as opposed to computing in advance.

Advertisement