I have some code which mainly revoles around the following couple of lines:
#! /usr/bin/env python
from crypt import crypt
import itertools
from string import ascii_letters, digits
def decrypt(all_hashes, salt, charset=ascii_letters + digits + '-' + '/'):
products = (itertools.product(charset, repeat=r) for r in range(10))
chain = itertools.chain.from_iterable(products)
for i, candidate in enumerate(chain, 1):
if i % 100 == 0:
print ('%d th candidate: %s' % (i, candidate))
hash = crypt(''.join(candidate), salt)
if hash in all_hashes:
yield candidate, hash
all_hashes.remove(hash)
if not all_hashes:
return
all_hashes = ('aaRrt6qwqR7xk', 'aaacT.VSMxhms' , 'aaWIa93yJI9kU',
'aakf8kFpfzD5E', 'aaMOPiDnXYTPE', 'aaz71s8a0SSbU', 'aa6SXFxZJrI7E',
'aa9hi/efJu5P.', 'aaBWpr07X4LDE', 'aaqwyFUsGMNrQ', 'aa.lUgfbPGANY',
'aaHgyDUxJGPl6', 'aaTuBoxlxtjeg', 'aaluQSsvEIrDs', 'aajuaeRAx9C9g',
'aat0FraNnWA4g', 'aaya6nAGIGcYo', 'aaya6nAGIGcYo', 'aawmOHEectP/g',
'aazpGZ/jXGDhw', 'aadc1hd1Uxlz.', 'aabx55R4tiWwQ', 'aaOhLry1KgN3.',
'aaGO0MNkEn0JA', 'aaGxcBxfr5rgM', 'aa2voaxqfsKQA', 'aahdDVXRTugPc',
'aaaLf47tEydKM', 'aawZuilJMRO.w', 'aayxG5tSZJJHc', 'aaPXxZDcwBKgo',
'aaZroUk7y0Nao', 'aaZo046pM1vmY', 'aa5Be/kKhzh.o', 'aa0lJMaclo592',
'aaY5SpAiLEJj6', 'aa..CW12pQtCE', 'aamVYXdd9MlOI', 'aajCM.48K40M.',
'aa1iXl.B1Zjb2', 'aapG.//419wZU')
all_hashes = set(all_hashes)
salt = 'aa'
for candidate, hash in decrypt(all_hashes, salt):
print 'Found', hash, '! The original string was', candidate
The program is basically a Brute Force attack and because the output can take a while I need to know if the program is still running or has crashed so I was thinking of having an output statement that says how many combinations of characters have been tried and maybe what the last tried string was but have no idea how to do it.
Thanks in advance for assistance