2016-04-26 12 views
0

Ich möchte Hashes von zwei Dateien vergleichen. Aber egal, ob die Dateien unterschiedlich sind oder nicht, auch bei unterschiedlichem Hashes Vergleichsergebnis WahrenVergleichen Sie MD5-Hashes von zwei Dateien in Python

Hier ist der Code:

import hashlib 

hasher1 = hashlib.md5() 
afile1 = open('canvas.png', 'rb') 
buf1 = afile1.read() 
a = hasher1.update(buf1) 
print(str(hasher1.hexdigest())) 

hasher2 = hashlib.md5() 
afile2 = open('img5.png', 'rb') 
buf2 = afile2.read() 
b = hasher2.update(buf2) 
print(str(hasher2.hexdigest())) 

print(str(a) == str(b)) 

Der Ausgang:

614c9853a7f62c5b60d7d15bde80708f 
76dc116b2c1b19b265db5e657846e649 
True 

Process finished with exit code 0 

Antwort

2

Als allgemeine Regel gilt Python Methoden folgen dem Prinzip command-query separation - so dass Methoden, die das Objekt (dh Befehle) ändern, None zurückgeben. Dazu gehören beispielsweise , list.sort und dict.update. Dies gilt auch für das Verfahren hasher1.update. So

a = hasher1.update(buf1) 

ordnet None-a. Verwenden Sie stattdessen

hasher1.update(buf1) 
a = hasher1.hexdigest() 

und ähnlich für b.


import hashlib 

digests = [] 
for filename in ['canvas.png', 'img5.png']: 
    hasher = hashlib.md5() 
    with open(filename, 'rb') as f: 
     buf = f.read() 
     hasher.update(buf) 
     a = hasher.hexdigest() 
     digests.append(a) 
     print(a) 

print(digests[0] == digests[1]) 
+0

Oh, wirklich dumme Fehler. Vielen Dank – VAGrus

0

Das ist für mich gearbeitet:

import hashlib 
#File 1 
hasher1 = hashlib.md5() 
afile1 = open('C:/.../elephant_rgb.png', 'rb') 
buf1 = afile1.read() 
a = hasher1.update(buf1) 
md5_a=(str(hasher1.hexdigest())) 
#File 2 
hasher2 = hashlib.md5() 
afile2 = open('C:/.../innDay-Pic2.png', 'rb') 
buf2 = afile2.read() 
b = hasher2.update(buf2) 
md5_b=(str(hasher2.hexdigest())) 
#Compare md5 
if(md5_a==md5_b): 
    print("Yes") 
else: 
    print("No") 

##No 
Verwandte Themen