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.