In Python 3.2 I wanted to brute-force a random password like:
PassWord = random.randint(0,9999)
I made something that could try random passwords:
import random
PassWord = str(random.randint(0,9999))
Trial = ' '
while Trial != PassWord:
Trial = str(random.randint(0,9999))
print(Trial)
if Trial == PassWord:
print('The password is: '+PassWord)
input()
It's trying to randomly guess a password but a brute-force attack tries all possibilities. How do I first checks all possibilities with 1 digit, in the right order (0, 1, 2, 3 and so on), then 2, 3 and 4 digits?
Code first:
from itertools import product
chars = '0123456789' # chars to look for
for length in range(1, 3): # only do lengths of 1 + 2
to_attempt = product(chars, repeat=length)
for attempt in to_attempt:
print(''.join(attempt))
itertools.product
produces a Cartesian join of its input(s) - in this case, it's being 'joined' to itself. So in the first iteration, each single character is printed. Then in the next iteration, because of repeat=length
(and length
is now == 2), generates '00', '01', etc... It's worth trying it and seeing the output to understand it better.
This also means you can throw in letters (uppercase/lowercase), and change the upperbound in the range
function.
It's certainly not going to break the world of code-breaking, but should give you an idea of the flexibility of Python and the tools available to you.
I'll leave you to check the passwords match and break out the loop.