比较 python 中两个文件的 md5 哈希值
Compare md5 hashes of two files in python
我想比较两个文件的哈希值。但是无论文件是否不同,即使不同的哈希比较结果True
代码如下:
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
作为一般规则 Python 方法遵循 command-query separation 的原则——因此修改对象(即命令)的方法 return 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])
这对我有用:
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
我认为没有必要创建散列对象。您应该可以直接使用 hashlib 模块中的 md5 函数。
digest = hashlib.md5(fileobj.read()).hexdigest()
所以你可以这样写:
from hashlib import md5
digests = list()
for filename in ['canvas.png', 'img5.png']:
with open(filename, 'rb') as f:
digest = md5(f.read()).hexdigest()
digests.append(digest)
print(digests[0] == digests[1])
我想比较两个文件的哈希值。但是无论文件是否不同,即使不同的哈希比较结果True
代码如下:
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
作为一般规则 Python 方法遵循 command-query separation 的原则——因此修改对象(即命令)的方法 return 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])
这对我有用:
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
我认为没有必要创建散列对象。您应该可以直接使用 hashlib 模块中的 md5 函数。
digest = hashlib.md5(fileobj.read()).hexdigest()
所以你可以这样写:
from hashlib import md5
digests = list()
for filename in ['canvas.png', 'img5.png']:
with open(filename, 'rb') as f:
digest = md5(f.read()).hexdigest()
digests.append(digest)
print(digests[0] == digests[1])