2016-04-26 5 views
0

Я хочу сравнить хэши двух файлов. Но независимо от того, если файлы отличаются или нет, даже с различным сравнением хэш результатов ПравдаСравните md5 хэши двух файлов в python

Вот код:

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)) 

Выход:

614c9853a7f62c5b60d7d15bde80708f 
76dc116b2c1b19b265db5e657846e649 
True 

Process finished with exit code 0 

ответ

2

По общему правилу Python методы следуют принципу command-query separation - так что методы, которые изменяют объект (т.е. команды), возвращают None. Это включает, например, , list.sort и dict.update. Это также относится к методу hasher1.update. Так

a = hasher1.update(buf1) 

назначает None к a. Вместо этого используйте

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

и аналогичным образом для 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

О, действительно глупую ошибку. благодаря – VAGrus

0

Это работает для меня:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^