Mam ten błąd:
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
kiedy próbuję wykonać ten kod w 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
źródło
źródło
Odpowiedzi:
Prawdopodobnie szuka kodowania znaków z
wordlistfile
.Lub, jeśli pracujesz na zasadzie linia po linii:
źródło
open(wordlist,"r",encoding='utf-8')
dlaczego używać otwartego z określonym kodowaniem, kodowanie jest określane jako kodek dekodujący, bez tej opcji używa kodowania zależnego od platformy.Musisz zdefiniować
encoding format
jakutf-8
, spróbuj to łatwy sposób,Ten przykład generuje liczbę losową przy użyciu algorytmu SHA256:
źródło
Aby zapisać hasło (PY3):
źródło
Błąd mówi już, co musisz zrobić. MD5 działa na bajtach, więc musisz zakodować ciąg Unicode
bytes
, npline.encode('utf-8')
. Za pomocą .źródło
Najpierw spójrz na to odpowiedź.
Teraz komunikat jest jasny: można używać tylko bajty, a nie ciągi Python (co było
unicode
w Pythonie <3), więc trzeba kodować sznurki z preferowanym kodowaniem:utf-32
,utf-16
,utf-8
a nawet jeden z ograniczona 8- kodowanie bitowe (co niektórzy nazywają stronami kodowymi).Bajty w pliku listy słów są automatycznie dekodowane do formatu Unicode przez Python 3 podczas czytania z pliku. Proponuję zrobić:
dzięki czemu zakodowane dane przekazywane do algorytmu md5 są kodowane dokładnie tak, jak plik leżący u podstaw.
źródło
źródło
Możesz otworzyć plik w trybie binarnym:
źródło
kodowanie tej linii naprawiło to dla mnie.
źródło
Jeśli jest to łańcuch jednowierszowy. owiń go za pomocą b lub B. np .:
lub
źródło
Ten program jest bezbłędną i ulepszoną wersją powyższego programu do krakowania MD5, który odczytuje plik zawierający listę zaszyfrowanych haseł i sprawdza je pod kątem zaszyfrowanych słów z listy słów w słowniku angielskim. Mam nadzieję, że to jest pomocne.
Pobrałem angielski słownik z następującego linku https://github.com/dwyl/english-words
źródło