Pregunta

Estoy usando el siguiente código para calcular MD5SUM de un archivo -

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

Esto normalmente funciona bien, pero si encuentro un archivo grande (~ 1GB) - por ejemplo. una imagen iso o un archivo VOB de DVD: obtengo una excepción de memoria insuficiente.

Sin embargo, puedo calcular el MD5SUM en cygwin para el mismo archivo en aproximadamente 10 segundos.

Por favor, sugiera cómo puedo hacer que esto funcione para archivos grandes en mi programa.

Gracias

¿Fue útil?

Solución

Sugiero usar el método alternativo:

MD5CryptoServiceProvider.ComputeHash(Stream)

y simplemente pase una secuencia de entrada abierta en su archivo. Es casi seguro que este método no se leerá de una vez en todo el archivo de la memoria.

También observaría que en la mayoría de las implementaciones de MD5 es posible agregar datos de byte [] en la función de resumen una porción a la vez, y luego pedir el hash al final.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top