http://abstracthack.wordpress.com/2007/10/19/calculating-md5-checksum/
O autor mostra duas abordagens
1 - O modo errado (aloca tudo na RAM)
from md5 import md5
fname = "ubuntu-7.10-desktop-i386.iso"
s = md5(open(fname, "rb").read()).hexdigest()
print "md5 checksum: %s" % s
2 - Um pouco mais elaborado mas trabalha em blocos e finalmente junta tudo
em um só resultado:
from md5 import md5
fname = "ubuntu-7.10-desktop-i386.iso"
block_size = 0x10000
def upd(m, data):
m.update(data)
return m
fd = open(fname, "rb")
try:
contents = iter(lambda: fd.read(block_size), "")
m = reduce(upd, contents, md5())
print "md5 checksum: %s" % m.hexdigest()
finally:
fd.close()
Finalmente achei um outro post aqui mostrando o uso da biblioteca hashlib
que parece ser mais atual, veja portanto o código pronto:
#!/usr/local/bin/python
import os, sys
import hashlib
def md5(fileName, excludeLine="", includeLine=""):
"""Compute md5 hash of the specified file"""
m = hashlib.md5()
try:
fd = open(fileName,"rb")
except IOError:
print "Unable to open the file in readmode:", filename
return
content = fd.readlines()
fd.close()
for eachLine in content:
if excludeLine and eachLine.startswith(excludeLine):
continue
m.update(eachLine)
m.update(includeLine)
return m.hexdigest()
if __name__ == "__main__":
for eachFile in sys.argv[1:]:
print "%s %s" %(md5(eachFile), eachFile)
Nenhum comentário:
Postar um comentário
Insira seu comentário - O mesmo será submetido à aprovação!