CRC-32 недостаточно хорош; тривиально создавать коллизии, то есть два файла (одинаковой длины, если вы этого хотите) с одинаковым CRC-32. Даже в случае отсутствия злоумышленника, столкновения будут происходить случайным образом, если у вас будет около 65000 различных файлов одинаковой длины.
Хеш-функция предназначена для предотвращения столкновений. С MD5 или SHA-1 вы не получите случайных столкновений. Если ваша установка связана с безопасностью (то есть где-то есть кто-то, кто может активно пытаться создавать коллизии), тогда вам нужна хэш-функция secure . MD5 больше не является безопасным (создание коллизий с MD5 легко), и SHA-1 несколько слаб в этом отношении (фактические коллизии не были рассчитаны, но метод для их создания известен, и, хотя и дорог, он намного дешевле, чем так и должно быть). Обычная рекомендация - использовать SHA-256 или SHA-512 (для безопасности достаточно SHA-256; SHA-512 может быть немного быстрее в больших 64-разрядных системах, но пропускная способность чтения файлов будет более ограниченной, чем скорость хеширования) .
Примечание: при использовании криптографической хеш-функции нет необходимости хранить и сравнивать длины файлов; хеш достаточен для устранения неоднозначности файлов.
В настройках, не связанных с безопасностью (то есть вы боитесь только случайных столкновений), тогда можно использовать MD4 . Он полностью «сломан» как криптографическая хеш-функция, но все же это очень хорошая контрольная сумма, и она действительно быстрая (на некоторых платформах на основе ARM она даже быстрее, чем CRC-32, для гораздо лучшей устойчивости к случайным действиям). столкновения). По сути, вы не должны использовать MD5: если у вас есть проблемы с безопасностью, то MD5 не должен использоваться (он сломан; используйте SHA-256); и если у вас нет проблемы с безопасностью, то MD4 быстрее, чем MD5.