MD5 и SHA-1 прекрасно подходят для обнаружения случайных повреждений / изменений в файлах. Вероятность того, что случайно измененный файл будет иметь тот же дайджест MD5, равен 1 на 2 128 = 340 282 366 920 938 463 463 374 607 431 768 211 456. Вероятность случайного столкновения SHA-1 еще меньше, один на 2 ^ 160. Если мы говорим о поиске случайных совпадений среди коллекции файлов (известной как проблема дня рождения), вам потребуется около 2 ^ 64 = 18 миллиардов миллиардов, прежде чем коллизия MD5 станет вероятной. Обратите внимание, что размер файлов не имеет значения; имеет значение количество задействованных файлов.
Но ни MD5, ни SHA-1 недостаточно для защиты от злонамеренного замещения файлов или для предоставления надежного уникального идентификатора для файлов. Например, если вы используете любой из них, кто-то может дать вам один файл, подсчитать хеш-дайджест, а затем обмануть его, подменив его другим файлом с таким же хешем. Или отправьте два файла с одинаковым хешем, что может запутать вашу систему.
Кстати, случайное / злонамеренное различие немного потеряно. Предположим, кто-то нашел два PDF-файла, которые Google создал с тем же хешем SHA-1, подумал: «Это круто! Я должен сохранить их на потом», а затем попытался использовать вашу систему для хранения и распространения ... таким образом нарушая сортировку системы случайно. Если что-то подобное возможно, лучше использовать SHA-256.
РЕДАКТИРОВАТЬ: BitErrant похож на то, что я описал в предыдущем абзаце: это эксплойт против BitTorrent, использующий тот факт, что BitTorrent использует контрольные суммы SHA-1 в качестве идентификаторов для фрагментов файлов.