Могу ли я использовать часть хеша MD5 для идентификации данных? - PullRequest
7 голосов
/ 06 мая 2010

Я использую хэш MD5 для идентификации файлов с неизвестным происхождением . Злоумышленников здесь нет, поэтому мне все равно, что MD5 был сломан, и можно намеренно генерировать столкновения.

Моя проблема в том, что мне нужно обеспечить ведение журнала, чтобы легче было диагностировать различные проблемы. Если я записываю каждый хеш как шестнадцатеричную строку, это слишком длинно, неудобно и выглядит некрасиво, поэтому я хотел бы сократить строку хеша.

Теперь я знаю, что просто взять небольшую часть GUID - очень плохая идея - GUID разработаны так, чтобы быть уникальными, но часть их не является.

То же самое относится и к MD5 - могу ли я взять, скажем, первые 4 байта MD5 и предположить, что вероятность столкновения увеличивается только из-за уменьшенного количества байтов по сравнению с исходным хешем?

Ответы [ 3 ]

7 голосов
/ 06 мая 2010

Короткий ответ - да, вы можете использовать первые 4 байта в качестве идентификатора. Остерегайтесь парадокса дня рождения, хотя:

http://en.wikipedia.org/wiki/Birthday_paradox

Риск столкновения быстро увеличивается по мере добавления файлов. С 50,000 вероятность того, что вы получите столкновение с идентификатором, составляет примерно 25%.

РЕДАКТИРОВАТЬ: Хорошо, просто прочитайте ссылку на ваш другой вопрос, и с 100 000 файлов вероятность столкновения составляет примерно 70%.

1 голос
/ 06 мая 2010

Еще один способ сократить хеш - это преобразовать его во что-то более эффективное, чем HEX, например Base64 или какой-то другой вариант.

Даже если вы решили взять 4 символа, взятие 4 символов из base64 даст вам больше битов, чем шестнадцатеричное.

1 голос
/ 06 мая 2010
...