2017-01-19 8 views
1

Ich versuche, ein Python-Programm zu erstellen, das Wörter aus einem Wörterbuch lesen, einen MD5-Hash erstellen und mit einem bestimmten Hash vergleichen würde.Warum stimmt MD5-Hash eines Wortes aus einer Datei nicht mit dem Hash einer Zeichenfolge überein?

Alles funktioniert gut, wenn ich versuche, zwei Hashes von Wörtern zu vergleichen, die aus einer Datei gelesen wurden nicht:

if hashlib.md5(b"string").hexdigest() == "b45cffe084dd3d20d928bee85e7b0f21": 
    print("Equal!") 

Aber wenn ich lese die Worte Zeile für Zeile aus einer Datei, die Hash-Wert des Das Wort ist anders. Der Code sieht so aus:

f = open('short.txt', 'r') 

stringHash = 'b45cffe084dd3d20d928bee85e7b0f21' 

for line in f: 

    if stringHash == hashlib.md5(line.encode('utf_8')).hexdigest(): 
     print("Found it! Password: %s" % line) 

Danke für jede Hilfe und Erklärung.

Antwort

4

Zeile-für-Zeile-Datei-Iterator ergibt die gesamte Zeile einschließlich Zeilenende.

In Ihrem Code fügen Sie den Zeilenabschluss der Zeile ein.

line.encode('utf_8').rstrip() wird das richtige Ergebnis liefern.

rstrip() wird fehlschlagen, wenn Ihre Zeichenfolge (mit Absicht) mit Leerzeichen endet. In diesem Fall nur tun:

line.encode('utf_8').rstrip('\r\n') 

, wenn die Datei in Text Modus auf Unix, möglich \r (Carriage Return) offen ist, könnte (kein Problem auf Windows) bleibt

(und rstrip tun nicht entfernen Sie die '\ r \ n' Zeichenfolge, aber jeder \r oder/und n am Ende der Zeile enthalten, ist es nicht wie str.split)

+0

Es hat funktioniert! Danke, Mann! ;) –

+1

kannst du die antwort dann annehmen: http://stackoverflow.com/help/someone-answers –

Verwandte Themen