РЕДАКТИРОВАТЬ:
Понял, я думаю. Посмотрите на свою функцию crack (). Вы открываете хеш-файл, а затем for line in f
вы убираете строку, а затем разбиваете ее на line1
, чтобы получить хеш из вашего хеш-файла. Затем вы сравниваете полную line
вместо line1
с хешем, который хотите взломать. Конечно, полная строка содержит больше, чем просто хеш, поэтому она не может совпадать. Для ясности, вы можете переименовать line1
в generated_hash
. Тогда было бы более очевидно, что вам нужно if generated_hash == Hash:
Другие примечания:
В результате устранения некоторых неполадок мы определили, что примеры хэшей, размещенные в вопросе, являются недействительными Я также установил, что метод, используемый в решении для затравки, это действительно `hashlib.md5 (salt + cleartext) .hexdigest (). Постер правильно генерирует хэши, но в какой-то момент терпит неудачу при попытке сравнить их с заданными им теневыми файлами. Первоначально были некоторые проблемы с окончанием строки.
Поскольку я знаю, что автор может без проблем генерировать хэши, я публикую альтернативный способ создания хешей и сохранения их в словаре, чтобы хэш-таблицу не приходилось каждый раз считывать с диска.
import hashlib
#Initialize an empty dictionary. We'll add entries to this as we read the
#dictionary file in
hash_table = {}
print('Generating hashes...')
#Using with on the file object means that it will be closed automatically
#when the block is finished
with open('dictionary.txt', 'r') as inp_file:
for word in inp_file.readlines():
#strip off the trailing whitespace ('\n' or '\n\r' depending on the platform)
word = word.strip()
#The requirement is for a salt to be prepended to the cleartext
#dictionary word. For each possible salt value...
for salt in range(0,256):
#convert the salt from an int to a string here so we don't have to
#continually do it below
salt = str(salt)
#Store the hash/cleartext pair in the dictionary. The key of the
#dictionary is the hash and the value is the salted cleartext
hash_table[hashlib.md5(salt+word).hexdigest()] = salt+word
Обратите внимание, как я использую with fileobject as some_name:
, который автоматически закрывает файл после завершения блока with. Хеши хранятся в hash_table, который является словарем ключ / значение. Мы используем хеш-код в качестве ключа и открытый текст в качестве значения для быстрого сопоставления хеш-кодов. Если вы хотите знать, есть ли конкретный хеш в hash_table, if 'some_hex_hash' in hash_table: do stuff
- правильный подход. Чтобы получить открытый текст для значения хеша, это просто hash_table['some_hex_hash']
. См. http://docs.python.org/tutorial/datastructures.html#dictionaries для получения дополнительной информации о словарях.
Конечно, это та часть, над которой вы уже работаете. Хитрость заключается в том, чтобы правильно загрузить теневые хеши, а затем проверить, есть ли они в вашем файле (или в хеш-таблице при использовании словаря).