У меня есть эта ошибка:
Traceback (most recent call last):
File "python_md5_cracker.py", line 27, in <module>
m.update(line)
TypeError: Unicode-objects must be encoded before hashing
когда я пытаюсь выполнить этот код в Python 3.2.2 :
import hashlib, sys
m = hashlib.md5()
hash = ""
hash_file = input("What is the file name in which the hash resides? ")
wordlist = input("What is your wordlist? (Enter the file name) ")
try:
hashdocument = open(hash_file, "r")
except IOError:
print("Invalid file.")
raw_input()
sys.exit()
else:
hash = hashdocument.readline()
hash = hash.replace("\n", "")
try:
wordlistfile = open(wordlist, "r")
except IOError:
print("Invalid file.")
raw_input()
sys.exit()
else:
pass
for line in wordlistfile:
# Flush the buffer (this caused a massive problem when placed
# at the beginning of the script, because the buffer kept getting
# overwritten, thus comparing incorrect hashes)
m = hashlib.md5()
line = line.replace("\n", "")
m.update(line)
word_hash = m.hexdigest()
if word_hash == hash:
print("Collision! The word corresponding to the given hash is", line)
input()
sys.exit()
print("The hash given does not correspond to any supplied word in the wordlist.")
input()
sys.exit()
python
python-3.x
unicode
syntax-error
hashlib
JohnnyFromBF
источник
источник
Ответы:
Вероятно, ищет кодировку из
wordlistfile
.Или, если вы работаете построчно:
источник
open(wordlist,"r",encoding='utf-8')
Для чего используется открытое с определенной кодировкой, в кодировке указывается кодек декодирования, без этой опции используется платформо-зависимое кодирование.Вы должны определить,
encoding format
какutf-8
, Попробуйте этот простой способ,В этом примере генерируется случайное число с использованием алгоритма SHA256:
источник
Чтобы сохранить пароль (PY3):
источник
Ошибка уже говорит о том, что вы должны сделать. MD5 работает с байтами, поэтому вы должны кодировать строку Unicode
bytes
, например, с помощьюline.encode('utf-8')
.источник
Пожалуйста, сначала посмотрите на этот ответ.
Теперь, сообщение об ошибке ясна: вы можете использовать только байты, а не строки Python (то , что раньше
unicode
в Python <3), так что вы должны кодировать строки в выбранной кодировке:utf-32
,utf-16
,utf-8
или даже один из запретных 8- битовые кодировки (что некоторые могут назвать кодовыми страницами).Байты в вашем файле списка слов автоматически декодируются в Unicode с помощью Python 3, когда вы читаете из файла. Я предлагаю вам сделать:
так что закодированные данные, передаваемые в алгоритм md5, кодируются точно так же, как и основной файл.
источник
источник
Вы можете открыть файл в двоичном режиме:
источник
кодирование этой строки исправило это для меня.
источник
Если это строка из одной строки. оберните это с b или B. например:
или
источник
Эта программа является улучшенной версией вышеупомянутого взломщика MD5 без ошибок, который считывает файл, содержащий список хешированных паролей, и проверяет его по хешированным словам из списка слов английского словаря. Надеюсь, это полезно.
Я скачал словарь английского языка по следующей ссылке https://github.com/dwyl/english-words
источник