Все алгоритмы криптостойкости не должны демонстрировать никакого столкновения вообще. Конечно, коллизии обязательно существуют (существует больше возможных входов, чем возможных выходов), но при использовании существующих компьютерных технологий должно быть невозможно найти их.
Когда хеш-функция имеет выход n битов, можно найти столкновение с работой около 2 n / 2 , поэтому на практике хеш-функция с менее чем 140 битами вывода не может быть криптографически сильной. Более того, некоторые хеш-функции имеют недостатки, которые позволяют злоумышленникам быстрее находить столкновения; такие функции называются «нарушенными». Ярким примером является MD5.
Если вы не находитесь в обстановке безопасности и боитесь только случайных столкновений (то есть никто не будет активно пытаться спровоцировать столкновение, это может произойти только из-за чистой неудачи), тогда сломанный криптографический хеш Функция будет в порядке. Обычная рекомендация - MD4 . Криптографически говоря, он настолько сломан, насколько это возможно, но для не криптографических целей он чертовски быстр и обеспечивает 128 бит вывода, что позволяет избежать случайных коллизий.
Однако есть вероятность, что у вас не возникнет проблем с производительностью SHA-256 или SHA-512. На самом простом ПК они уже обрабатывают данные быстрее, чем может обеспечить жесткий диск: если вы хэшируете файл, чтение файла будет узким местом, а не хешированием. Я бы посоветовал использовать SHA-256, возможно, обрезать его вывод до 128 бит (если он используется в ситуациях, не связанных с безопасностью), и рассмотреть возможность переключения на другую функцию, только если какая-то проблема, связанная с производительностью, должным образом замечена и измерена.