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

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

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

Некоторые превентивные пояснения:

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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