Ich habe diesen Fehler:
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
Wenn ich versuche, diesen Code in Python 3.2.2 auszuführen :
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
quelle
quelle
Antworten:
Es wird wahrscheinlich nach einer Zeichenkodierung von gesucht
wordlistfile
.Oder wenn Sie zeilenweise arbeiten:
quelle
open(wordlist,"r",encoding='utf-8')
Warum Open mit spezifischer Codierung verwenden, wird die Codierung als Decodierungscodec angegeben. Ohne diese Option wird die plattformabhängige Codierung verwendet.Sie müssen definieren
encoding format
wieutf-8
: Versuchen Sie diesen einfachen Weg,In diesem Beispiel wird mithilfe des SHA256-Algorithmus eine Zufallszahl generiert:
quelle
So speichern Sie das Passwort (PY3):
quelle
Der Fehler sagt bereits, was Sie tun müssen. MD5 arbeitet mit Bytes, daher müssen Sie Unicode-Zeichenfolgen codieren
bytes
, zline.encode('utf-8')
. B. mit .quelle
Bitte schauen Sie sich zuerst diese Antwort an.
Nun ist die Fehlermeldung klar: Sie können nur Bytes verwenden, nicht Python - Strings (was früher seine
unicode
in Python <3), so dass Sie die Saiten mit Ihrer bevorzugten Codierung zu codieren haben:utf-32
,utf-16
,utf-8
oder auch nur eine der eingeschränkten 8- Bitcodierungen (was manche als Codepages bezeichnen).Die Bytes in Ihrer Wortlistendatei werden von Python 3 beim Lesen aus der Datei automatisch in Unicode dekodiert. Ich schlage vor, Sie tun:
Damit werden die codierten Daten, die an den MD5-Algorithmus gesendet werden, genau wie die zugrunde liegende Datei codiert.
quelle
quelle
Sie können die Datei im Binärmodus öffnen:
quelle
Das Codieren dieser Zeile hat es für mich behoben.
quelle
Wenn es sich um eine einzeilige Zeichenfolge handelt. wickeln Sie es mit b oder B. zB:
oder
quelle
Dieses Programm ist die fehlerfreie und erweiterte Version des oben genannten MD5-Crackers, die die Datei mit der Liste der Hash-Passwörter liest und sie mit Hash-Wörtern aus der englischen Wörterbuch-Wortliste vergleicht. Hoffe es ist hilfreich.
Ich habe das englische Wörterbuch über den folgenden Link heruntergeladen: https://github.com/dwyl/english-words
quelle