Я использую хеш MD5 для идентификации файлов с неизвестным источником. Никакой взломщик здесь, таким образом, я не забочусь, что MD5 был поврежден и можно намечено генерировать коллизии.
Моя проблема, я должен обеспечить вход так, чтобы различные проблемы были диагностированы легче. Если бы я регистрирую каждый хеш как шестнадцатеричную строку, это слишком длинно, неудобно и выглядит ужасным, таким образом, я хотел бы укоротить строку хеша.
Теперь я знаю, что просто принятие небольшого участия GUID является очень плохой идеей - GUID разработаны, чтобы быть уникальными, но часть их не.
Действительно ли то же верно для MD5 - может я брать сказать, что первые 4 байта MD5 и предполагают, что я только получаю вероятность коллизии выше из-за сокращенного количества байтов по сравнению с исходным хешем?
Короткий ответ - да, вы можете использовать первые 4 байта в качестве идентификатора. Однако остерегайтесь парадокса дня рождения:
http://en.wikipedia.org/wiki/Birthday_paradox
Риск столкновения быстро возрастает по мере добавления большего количества файлов. При 50.000 вероятность столкновения id составляет примерно 25%.
EDIT: Хорошо, только что прочитал ссылку на ваш другой вопрос, и при 100.000 файлов вероятность столкновения составляет примерно 70%.
Другой способ сократить хэш - преобразовать его в нечто более эффективное, чем HEX, например Base64 или какой-либо его вариант.
Даже если вы решили взять 4 символа, взяв 4 символа base64, вы получите больше битов, чем в hex.