MD5 хеширование и сравнение в python - PullRequest
0 голосов
/ 04 февраля 2012

Для моего понимания я должен создать файл предварительно вычисленных значений хеша из данного словаря с солью 0 - 255 для каждого пароля. У меня есть хэши, но когда я пытаюсь сравнить их с данным теневым файлом, я ничего не получаю. Это приводит меня к мысли, что я, возможно, неправильно хеширую? Мой профессор сказал, что хеши паролей были сделаны с C. Это имеет значение?

Вот мой код: найти хеши

import hashlib

f = open('/root/dictionary/dictionary', 'r')
print f
i=0
def getMD5Hash(textToHash=None):
return hashlib.md5(textToHash).hexdigest()

for line in f:
    line = line.rstrip()
    #print line
    i=0

    while i <= 255:
            j=str(i)
            line1 = j+line
            md5=getMD5Hash(line1)
            print md5,':',line1
            i+=1

растрескивания

f1 = open('/root/dictionary/shadow3','r')


def crack(Hash=None):
    f = open('/root/dictionary/HASHES','r')

    for line in f:
    line = line.rstrip()
    line1 = line.split(" ")[0]

    if line == Hash:
        print (line,"\n",Hash)
        return line




for line in f1:
    line = line.rstrip()
    line = line.split(":")[1:]
    print line[0]
    result = crack(line[0])
    print result

РЕДАКТИРОВАТЬ: RAR файл с тенями, которые мне дали: http://mediafire.com/?euwjpxr3np36brt

предоставлен файл словаря - http://mediafire.com/?psspoqo900x0hmq

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

РЕДАКТИРОВАТЬ:

Понял, я думаю. Посмотрите на свою функцию 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 для получения дополнительной информации о словарях.

Конечно, это та часть, над которой вы уже работаете. Хитрость заключается в том, чтобы правильно загрузить теневые хеши, а затем проверить, есть ли они в вашем файле (или в хеш-таблице при использовании словаря).

0 голосов
/ 04 февраля 2012

Моя интуиция заключается в том, что хеш вычисляется не между реализациями, а в том, что хэшируется.Например, вы уверены, что теневой файл был засолен, добавив целочисленную строку в начало пароля?Вы уверены, что пароль должен быть strip() 'd?

...