MD5和SHA-1 算法来哈希文件比较常用,它们非常快,并且可以用它们来鉴别文件,它们是根据文件内容来鉴别,并不是文件的名字。
python hash MD5
注:使用python 高于2.7版本,包括3.x版本
import hashlib
hasher = hashlib.md5()
with open('myfile.jpg', 'rb') as afile:
buf = afile.read()
hasher.update(buf)
print(hasher.hexdigest())
使用rb模式打开文件,因为MD5方法是使用字节串的方式读取文件的,这样一来可以hash任何文件,不仅仅是文本文件
注意:这里的读取方法,像前面代码这样,当没有其他参数时,它是将所有的内容读入内存,如果不确定文件的大小,这很危险。
MD5 hash大的文件
import hashlib
BLOCKSIZE = 65536
hasher = hashlib.md5()
with open('anotherfile.txt', 'rb') as afile:
buf = afile.read(BLOCKSIZE)
while len(buf) > 0:
hasher.update(buf)
buf = afile.read(BLOCKSIZE)
print(hasher.hexdigest())
如果不想用MD5,可以换成其他算法,如:SHA1:
import hashlib
BLOCKSIZE = 65536
hasher = hashlib.sha1()
with open('anotherfile.txt', 'rb') as afile:
buf = afile.read(BLOCKSIZE)
while len(buf) > 0:
hasher.update(buf)
buf = afile.read(BLOCKSIZE)
print(hasher.hexdigest())
查看支持的算法: hashlib.algorithms_available. (3.2 以上版本有效).
最后封装成方法
import hashlib
def md5Checksum(filePath):
with open(filePath, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
print('The MD5 checksum of text.txt is', md5Checksum('test.txt'))
资源链接:
http://joelverhagen.com/blog/2011/02/md5-hash-of-file-in-python/
http://www.pythoncentral.io/hashing-files-with-python/