Вычисление MD5SUM больших файлов в C#

Я использую следующий код для вычисления MD5SUM файла -

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

это работает нормально, но если я сталкиваюсь с большим файлом (~1GB) - например, iso-образ или файл DVD VOB-я получаю исключение из памяти.

хотя я могу вычислить MD5SUM в cygwin для того же файла примерно за 10 секунд.

пожалуйста, предложите, как я могу заставить это работать для больших файлов в моей программе.

спасибо

1 ответов


Я предлагаю использовать альтернативный метод:

MD5CryptoServiceProvider.ComputeHash(Stream)

и просто передайте входной поток, открытый в вашем файле. Этот метод почти наверняка не читать весь файл в память сразу.

Я бы также отметил, что в большинстве реализаций MD5 можно добавить byte[] данные в функцию дайджеста по кусочку за раз, а затем попросите хэш в конце.