Вычисление MD5SUM больших файлов в C#
Я использую следующий код для вычисления MD5SUM файла -
byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));
Это нормально работает, но если я сталкиваюсь с большим файлом (~1 ГБ) - например, iso-образ или файл DVD VOB - я получаю исключение Out of Memory.
Тем не менее, я могу вычислить MD5SUM в Cygwin для того же файла примерно за 10 секунд.
Пожалуйста, предложите, как я могу заставить это работать для больших файлов в моей программе.
Спасибо
1 ответ
Решение
Я предлагаю использовать альтернативный метод:
MD5CryptoServiceProvider.ComputeHash(Stream)
и просто передайте входной поток, открытый для вашего файла. Этот метод почти наверняка не прочитает весь файл в памяти за один раз.
Я также хотел бы отметить, что в большинстве реализаций MD5 можно добавить byte[]
Данные в дайджест поочередно обрабатывают порцию, а затем запрашивают хеш в конце.