Cálculo de hashes MD5 para archivos grandes en Python
El módulo hashlib de Python proporciona una interfaz conveniente para calcular hashes criptográficos. Sin embargo, para archivos excepcionalmente grandes cuyo tamaño excede la memoria del sistema, usar hashlib directamente puede ser problemático.
Solución: hash progresivo
Para abordar este problema, empleamos hashing progresivo leyendo el archivo en fragmentos manejables. Este enfoque garantiza que todo el contenido del archivo esté codificado sin consumir demasiada memoria. Aquí hay una función de Python de muestra que implementa esta técnica:
import hashlib
def md5_for_file(f):
block_size = 2**20
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
Para calcular el hash MD5 de un archivo grande, puede invocar la función de la siguiente manera:
with open("filename", "rb") as f:
md5 = md5_for_file(f)
Nota sobre el modo de archivo
Asegúrese de abrir el archivo en modo binario con "rb" para obtener resultados precisos. El uso de "r" puede generar cálculos incorrectos.
Consideraciones adicionales
Para mayor comodidad, a continuación se presenta una versión mejorada de la función:
import hashlib
import os
def generate_file_md5(rootdir, filename):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), "rb") as f:
buf = f.read()
while buf:
m.update(buf)
buf = f.read()
return m.hexdigest()
Se recomienda realizar una verificación cruzada de los hashes calculados con herramientas externas como jacksum para verificar la precisión.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3