Лучший способ определить, совпадают ли два файла? - PullRequest
2 голосов
/ 03 апреля 2009

Если я перенесу файл через Интернет с компьютера A на компьютер B, используя C #, используя один из многих способов передачи файлов с помощью .NET, как лучше всего определить, является ли файл на компьютере A и компьютере B то же самое?

Я думаю, что хэши MD5 были бы хорошим способом сказать. Кажется, что это широко распространенный способ сказать. Однако я просто дважды проверяю, не существует ли лучшего способа, скрытого в .NET Framework.

Спасибо Tony

Ответы [ 3 ]

7 голосов
/ 03 апреля 2009

MD5 - путь.

3 голосов
/ 03 апреля 2009

CRC32 или Adler32, которые намного быстрее, чем MD5. Вы должны использовать MD5, если вам нужно проверить, не был ли файл манипулирован злонамеренным умыслом. Если в этом нет необходимости, то это излишне.

2 голосов
/ 08 августа 2013

алгоритмы SHA2 (SHA256, SHA512) по многим причинам лучше, чем MD5.

  • Они более устойчивы к столкновениям, что важно для больших файлов. Хотя MD5 может обнаруживать изменения в содержимом файла, более вероятно, что два больших файла могут иметь одинаковый MD5.
  • Они быстрее вычислить. Это может показаться странным, но алгоритм SHA ускоряется как за счет наборов микросхем, так и за счет реализации ОС. Сами алгоритмы также легче распараллелить. В результате собственные реализации алгоритмов SHA или SHA2 в Vista + намного быстрее, чем эквивалентный алгоритм MD5.
  • Они используют больший размер блока, что означает, что они могут одновременно работать с большими файловыми блоками. Время ввода-вывода может увеличиваться при обработке больших файлов.

Собственные реализации в .NET: SHA256Cng , SHA384Cng и SHA512Cng. Вместо того, чтобы создавать их явно, вы можете определить их как алгоритм по умолчанию, который будет использоваться при хешировании с использованием элемента в вашем файле конфигурации.

После этого вы можете просто написать HashAlgorithm.Create() или SHA256256.Create(), чтобы создать собственный экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...