Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare md5 hashes of two files in python

I want to compare hashes of two files. But no matter if files are different or not, even with different hashes comparison results True

Here is the 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))

The output:

614c9853a7f62c5b60d7d15bde80708f
76dc116b2c1b19b265db5e657846e649
True

Process finished with exit code 0
like image 762
VAGrus Avatar asked Apr 26 '16 18:04

VAGrus


People also ask

How do I compare two hash values in Python?

We call the same function for both the files and store their hashes in two separate variables. After which we use the hashes to compare them. If both the hashes are same (meaning the files contain same data), we output the message Both files are same and then the hash.

How can I compare the value of two hash files?

To compare hash values for two different files, store internal items containing the hash values in the history database. Then, define a comparison rule to verify that the values are equal. To compare files across platforms, use ACR/Connector to retrieve the hash value from the history database on the other platform.

Can 2 files have the same MD5?

Generally, two files can have the same md5 hash only if their contents are exactly the same. Even a single bit of variation will generate a completely different hash value.


2 Answers

As a general rule Python methods follow the principle of command-query separation -- so that methods that modify the object (i.e. commands) return None. This includes, for example, list.sort, and dict.update. It is also true of the hasher1.update method. So

a = hasher1.update(buf1)

assigns None to a. Instead, use

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

and similarly for 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])
like image 56
unutbu Avatar answered Sep 20 '22 01:09

unutbu


This worked for me :

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
like image 21
Ani Menon Avatar answered Sep 19 '22 01:09

Ani Menon