Wie zu verwenden sha256-hash in Python
Ich versuche zu Lesen in einer Datei mit Passwörtern. Dann bin ich versucht zu berechnen den hash für jede Passwort und vergleichen Sie es mit einem hash, ich habe bereits zu bestimmen, wenn ich entdeckt habe, das Passwort. Jedoch ist die Fehlermeldung die ich erhalte ist "TypeError: Unicode-Objekte müssen codiert werden vor der Vermischung". Hier ist mein code:
from hashlib import sha256
with open('words','r') as f:
for line in f:
hashedWord = sha256(line.rstrip()).hexdigest()
if hashedWord == 'ca52258a43795ab5c89513f9984b8f3d3d0aa61fb7792ecefe8d90010ee39f2':
print(line + "is one of the words!")
Kann mir jemand bitte helfen und erklären?
Die Linie bedeutet die Fehlermeldung verweist?
dies kann von nutzen sein: stackoverflow.com/questions/7585307/...
Sollten Sie wahrscheinlich beheben Ihre Einzüge, wie die Menschen sind eher bereit, Menschen zu helfen mit dem code, die Sie können Ausschneiden und einfügen in Ihre Dolmetscher.
dies kann von nutzen sein: stackoverflow.com/questions/7585307/...
Sollten Sie wahrscheinlich beheben Ihre Einzüge, wie die Menschen sind eher bereit, Menschen zu helfen mit dem code, die Sie können Ausschneiden und einfügen in Ihre Dolmetscher.
InformationsquelleAutor user3479683 | 2014-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fehlermeldung bedeutet genau das, was es sagt: Sie haben eine Unicode-Zeichenfolge. Sie können nicht SHA-256-hash ein Unicode-string, Sie können nur hash-bytes.
Aber warum hast du einen Unicode-string? Denn Sie sind das öffnen einer Datei im text-Modus, was bedeutet, dass Sie implizit Fragen, Python zu Dekodieren, werden die bytes in der Datei (mit Ihrem Standard-Codierung) von Unicode. Wenn Sie möchten, um die raw-bytes, verwenden Sie den binären Modus.
In anderen Worten, ändern Sie einfach diese Zeile:
... :
Können Sie feststellen, dass, sobald Sie dieses Problem zu lösen, die
print
Zeile wirft eine exception. Warum? weil Sie versuchen, fügen Sie einbytes
zu einemstr
. Du bist auch fehlt ein Leerzeichen, und Sie drucken die un-stripped Linie. Sie beheben könnte alle diese durch die Verwendung von zwei Argumenteprint
(wie inprint(line.rstrip(), "is one of the words")
).Aber dann bekommst du eine Ausgabe wie
b'\xc3\x85rhus' is one of the words
wenn Sie wollte, es zu druckenÅrhus is one of the words
. Das ist, weil Sie haben nun bytes, keine strings. Da Python nicht mehr die Dekodierung für Sie, müssen Sie dies manuell tun. Verwenden die gleiche Standard-Codierung, die manchmal funktioniert, wenn Sie nicht angeben, welche Zeichencodierung aufopen
haben, rufen Sie einfachdecode
ohne ein argument. Also:InformationsquelleAutor abarnert