2010-02-09 96 views
4

嗨,使用python功能Python的MD5在终端不匹配MD5

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

虽然我得到的一些文件的MD5,当我去到终端,做一个

md5 file 

结果我”我得到的是不一样的我的Python脚本输出(他们不匹配)。任何机会有人知道为什么?谢谢。

回答

22

hashlib.md5()将文件的内容取为其名称。

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

您需要打开文件和散列之前阅读其内容。

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() 
+0

感谢您的回答,完美无缺! – balgan 2010-02-15 19:51:22

+0

很棒的回答。我现在正在使用这个项目。谢谢 – Liam 2010-07-16 15:31:12

+0

@Douglas Leeder:在'f.read(10240)'中读取10240个字节有什么魔力吗?任何想法的最佳尺寸? – dawg 2010-12-27 06:18:13

1

什么是file?它应该等于open(filename, 'rb').read()。是吗?

3

试试这个

filehash = hashlib.md5(open('filename','rb').read()) 
print "FILE HASH: " + filehash.hexdigest() 
6
$ 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'