Вычисление MD5SUM больших файлов в C # - PullRequest
11 голосов
/ 30 апреля 2009

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

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

Это нормально работает, но если я сталкиваюсь с большим файлом (~ 1 ГБ) - например, ISO-образ или файл DVD VOB - я получаю исключение «Недостаточно памяти».

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

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

Спасибо

1 Ответ

29 голосов
/ 30 апреля 2009

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

MD5CryptoServiceProvider.ComputeHash(Stream)

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

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

...