2017-08-24 5 views
-3

Ich bin durch einen Ordner mit binären Dateien iterieren und versuche für jede Datei Hash-Werte, speziell sha1 und sha256 zu berechnen. Bei meinen Läufen bekomme ich seltsamerweise die gleichen sha256-Werte für alle Dateien, aber die sha1-Werte sind unterschiedlich (also korrekt).Verschiedene SHA1 aber gleiche SHA256

Unten ist ein Screenshot einer Ausgabedatei, die zeigt, dass sha1 Hashing korrekt durchgeführt wurde. Aber sha256 ist nicht. (Leider Dateinamen jeder Binärdatei ist auch seine SHA1)

wat is dis

Gibt es etwas falsch mit meinem Prozess? Dies ist der relevante Code in Python. ICH SEHE NICHT ETWAS. Es tut uns leid.

out.write("FILENAME,SHA1,SHA256\n") 
for root, dirs, files in os.walk(input_path): 
    for ffile in files: 
     myfile = os.path.join(root, ffile) 
     nice = os.path.join(os.getcwd(), myfile) 

     fo = open(nice, "rb") 
     a = hashlib.sha1(fo.read()) 
     b = hashlib.sha256(fo.read()) 
     paylname = os.path.basename(myfile) 
     mysha1 = str(a.hexdigest()) 
     mysha256 = str(b.hexdigest()) 
     fo.close() 

     out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256)) 
+2

Was denken Sie, 'fo.read()' wird gelesen, wenn es den Inhalt der Datei bereits gelesen hat? – deceze

+3

Wenn Sie 'fo.read()' für den sha1-Hash ausführen, haben Sie die gesamte Datei gelesen, aber Sie bewegen den Cursor nie zurück zum Anfang der Datei. also ist die Eingabe in den Hash sha256 immer die gleiche (nichts) –

+1

'hashlib.sha256 (b ''). hexdigest() == 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'' –

Antwort

0

, wie ich oben in meinem Kommentar setzen, lesen Sie die gesamte Datei zum ersten Hash, aber Sie müssen zurück an den Anfang der Datei suchen, es ein zweites Mal für den zweiten Hash zu lesen. alternativ könnten Sie es in einer Variablen speichern und dieses an jeden Hash übergeben.

out.write("FILENAME,SHA1,SHA256\n") 
for root, dirs, files in os.walk(input_path): 
    for ffile in files: 
     myfile = os.path.join(root, ffile) 
     nice = os.path.join(os.getcwd(), myfile) 

     fo = open(nice, "rb") 
     a = hashlib.sha1(fo.read()) 
     fo.seek(0,0) # seek back to start of file 
     b = hashlib.sha256(fo.read()) 
     paylname = os.path.basename(myfile) 
     mysha1 = str(a.hexdigest()) 
     mysha256 = str(b.hexdigest()) 
     fo.close() 

     out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256)) 
Verwandte Themen