256, а не 255.
Если предположить, что MD5 является безопасной хеш-функцией (оказывается, она не безопасна, но, ради обсуждения, давайте предположим, что она безопасна), то она должна вести себя как Случайный оракул , мифический объект, который выводит равномерно случайные значения при единственном ограничении, что он «запоминает» свои предыдущие выходные данные и возвращает то же самое значение снова, учитывая тот же самый вход.
Усечение вывода случайного оракула приводит к другому случайному оракулу. Таким образом, если вы сохраняете 32 бита, то вероятность коллизии с двумя различными входными сообщениями равна 1 в 2 ^ 32 (т.е. 1 в 256 ^ 4).
Теперь есть вещь, известная как парадокс дня рождения , который говорит, что, имея около 2 ^ 16 различных входов, есть хорошие шансы, что два из 2 ^ 16 соответствующих выходов столкнутся.
Было показано, что MD5 небезопасен для некоторых целей, в частности для всего, что связано со столкновениями. Текущая рекомендация по умолчанию: SHA-2 (семейство из четырех функций с размерами вывода 224, 256, 384 и 512 бит соответственно). Новый (американский) стандарт в настоящее время определяется в открытом конкурсе под кодовым названием SHA-3 . Это долгий процесс; новая функция должна быть выбрана к середине 2012 года. Некоторые из оставшихся кандидатов (в настоящее время 14 из 51) значительно быстрее, чем SHA-2, некоторые приближаются к производительности MD5, но при этом значительно более безопасны. Но это немного ново, поэтому сейчас вы должны использовать SHA-2 по умолчанию.