Являются ли первые 32 бита хеша md5 такими же «случайными», как и любая другая подстрока? - PullRequest
12 голосов
/ 14 мая 2009

Я ищу, чтобы создать 32-битный хэш некоторых объектов данных. Поскольку мне не хочется писать собственную хэш-функцию, а md5 доступен, мой текущий подход заключается в использовании первых 32 битов (то есть первых 8 шестнадцатеричных цифр) из хеша md5. Это приемлемо?

Другими словами, первые 32 бита хеша md5 так же "случайны", как и любая другая подстрока? Или есть ли причина, по которой я предпочел бы, скажем, последние 32 бита? или, может быть, XOR'ом четыре 32-битные подстроки вместе?

Некоторые упреждающие пояснения:

  • Эти хеши не должны быть криптографически безопасными.
  • Меня не беспокоит производительность md5 - она ​​более чем достаточно быстра для моих нужд.
  • Эти хэши должны быть достаточно "случайными", чтобы столкновения были редкими.
  • В этой системе количество предметов не должно превышать 10 000 (реально, вероятно, оно не будет вдвое меньше). Таким образом, в худшем случае вероятность возникновения каких-либо столкновений должна составлять около 1% (при условии, что найден достаточно «случайный» хеш).

Ответы [ 3 ]

11 голосов
/ 14 мая 2009

Для любой хорошей хэш-функции отдельные биты должны быть приблизительно случайными. Поэтому вы должны безопасно использовать только первые 32 бита хеша MD5.

В качестве альтернативы вы также можете использовать CRC32, который должен быть намного быстрее для вычисления (а код около 20 строк).

9 голосов
/ 14 мая 2009

Другими словами, первые 32 бита хеша md5 так же "случайный", как и любой другая подстрока?

Да. Если бы ответ был отрицательным, MD5 не был бы достаточно безопасным. (конечно, у него есть незначительные криптографические недостатки, но я не знаю ни о каких статистических)

1 голос
/ 14 апреля 2011

Старый вопрос здесь, но он часто возникает. Ответ, безусловно, НЕТ, в противном случае длина строки MD5 не должна превышать 32 бита.

Несмотря на это, строка MD5 вовсе не случайна - она ​​полностью и последовательно воспроизводима при одинаковом входном сигнале (что в значительной степени антислучайно ;-))

Является ли он достаточно уникальным для ваших целей, зависит от вашей цели.

...