私は主に次の数行を中心に回転するいくつかのコードを持っています:
#! /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
プログラムは基本的にブルートフォース攻撃であり、出力には時間がかかる可能性があるため、プログラムがまだ実行中かクラッシュしたかを知る必要があるため、試行された文字の組み合わせの数と、おそらく最後に試した文字列は何でしたが、それを行う方法がわかりません。
よろしくお願いします