2016-04-26 134 views
0

我想比较两个文件的哈希值。但是,不管文件不同或没有,即使有不同的哈希值比较结果比较python中两个文件的md5哈希

下面是代码:

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.sortdict.updatehasher1.update方法也是如此。所以

a = hasher1.update(buf1) 

分配Nonea。相反,使用

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