Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python MD5 not matching md5 in terminal

Tags:

python

hash

md5

I am getting MD5 of several files using python function:

filehash = hashlib.md5(file)
print "FILE HASH: " + filehash.hexdigest()

though when I go to the terminal and do a

md5 file

the result I'm getting is not the same my python script is outputting (they don't match). Any chance someone knows why?

like image 691
balgan Avatar asked Nov 27 '22 06:11

balgan


2 Answers

hashlib.md5() takes the contents of the file not its name.

See http://docs.python.org/library/hashlib.html

You need to open the file, and read its contents before hashing it.

f = open(filename,'rb')
m = hashlib.md5()
while True:
    ## Don't read the entire file at once...
    data = f.read(10240)
    if len(data) == 0:
        break
    m.update(data)
print m.hexdigest()
like image 185
Douglas Leeder Avatar answered Dec 26 '22 13:12

Douglas Leeder


$ md5 test.py
MD5 (test.py) = 04523172fa400cb2d45652d818103ac3
$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> s = open('test.py','rb').read()
>>> hashlib.md5(s).hexdigest()
'04523172fa400cb2d45652d818103ac3'
like image 32
telliott99 Avatar answered Dec 26 '22 12:12

telliott99