In [1]:
#!/usr/bin/env python
import hashlib
def iter_solve(password):
salt = 0
while True:
digest = hashlib.md5(password + str(salt)).hexdigest()
if digest.startswith('00000'):
yield digest
salt += 1
def solve_first(password):
digests = iter_solve(password)
return ''.join([digests.next()[5] for dummy in range(8)])
def solve_second(password):
digests = iter_solve(password)
solution = [None] * 8
while None in solution:
digest = digests.next()
if digest[5].isdigit() and int(digest[5]) < 8 and solution[int(digest[5])] is None:
solution[int(digest[5])] = digest[6]
return ''.join(solution)
In [2]:
# Example, puzzle 1
print solve_first('abc'), '18f47a30'
In [3]:
# Example, puzzle 2
print solve_second('abc'), '05ace8e3'
In [4]:
# Solution 1
print solve_first('uqwqemis')
In [5]:
# Solution 2
print solve_second('uqwqemis')