2015-08-13 5 views
2

Я работаю над небольшой программой python, которая будет по существу грубой силой хешей md5 с использованием файла слов. Программа принимает ваш хэш, а затем вы можете выбрать файл для использования в качестве списка слов. Затем он будет идти по строкам в файле и сделать хеш-версию md5 для проверки того, что вы ввели. Если они совпадут, то он скажет вам слово, которое производит этот хеш. Проблема в том, что когда программа превращает строки в хэши, она не создает корректного распознаваемого хеша md5. Например, он говорит, что хэш-тест md5 - это d8e8fca2dc0f896fd7cb4cb0031ba249. Я пробовал несколько способов кодирования текста и еще много чего, но не могу найти правильный ответ. Что я делаю не так?Python hashlib не создает правильный хэш для md5

import hashlib 

mainhash = raw_input("What hash would you like to try and break?") 
filename = raw_input("What file would you like to use?") 
times = 0 


if filename == "": 
    print "A list file is required." 
    exit() 

f = open(filename) 
for line in iter(f): 
    times = times + 1 
    word = line 
    line = hashlib.md5(line.encode("utf")).hexdigest() 
    print line 
    if line == mainhash: 
     print "Matching Hash found. Word is:" 
     print word 
     print times 
     exit() 

f.close() 
print "Sorry no match was found. Please try a different word file or make sure the hash is md5." 
print times 
+0

Что случилось с хэшем? – Cyphase

+0

Извините мое невежество: есть ли значение по умолчанию для кодирования в UTF? Обычно я вижу 'utf-x', причем' x' обычно составляет 8 – Pynchia

ответ

4

line включает в себя символ новой строки в конце строки. Заменить:

line = hashlib.md5(line.encode("utf")).hexdigest() 

с:

line = hashlib.md5(line.encode("utf").strip()).hexdigest() 

Даже один символ новой строки в конце строки будет полностью изменить хэш.

+0

ahh. Это проблема. Большое спасибо, сейчас работает отлично. – Vexxoz

+0

@Vexxoz, без проблем, и я ценю комментарий; однако [SO way] (https://stackoverflow.com/help/someone-answers), чтобы показать, что решение для вас - это принять его :). – Cyphase