Сколько случайных элементов перед MD5 производит столкновения?

Возможно, вы захотите также рассмотреть класс java.util.concurrent.FutureTask.

Если вы используете Java 5 или более позднюю версию, FutureTask - это реализация «подстановочного асинхронного вычисления» под ключ. "

Есть еще более богатые асинхронные действия по планированию выполнения, доступные в пакете java.util.concurrent (например, ScheduledExecutorService), но FutureTask могут иметь все необходимые вам функции.

Я даже зашел так далеко, чтобы сказать, что уже не рекомендуется использовать первый образец кода, который вы дали в качестве примера с тех пор, как FutureTask стал доступен. (Предполагая, что вы находитесь на Java 5 или новее.)

149
задан MPelletier 30 April 2012 в 04:11
поделиться

7 ответов

Вероятность всего двух хешей, случайно сталкивающихся, 1/2 <глоток> 128 , который является 1 в 340 нониллионах undecillion 282 decillion 366 920 октильонов 938 септильонов 463 секстильона 463 квинтильона 374 квадрильона 607 триллионов 431 миллиард 768 миллионов 211 тысяч 456.

Однако, если Вы сохраняете все хеши тогда, вероятность немного выше благодаря парадокс дня рождения . Для имения 50%-го шанса любого хеша, сталкивающегося с любым другим хешем, Вам нужно 2 <глоток> 64 хеши. Это означает, что для получения коллизии, в среднем, необходимо будет хешировать 6 миллиард файлы в секунду в течение 100 лет .

276
ответ дан Kornel 30 April 2012 в 04:11
поделиться

Поэтому ожидайте, он:

md5(filename) + timestamp

или:

md5(filename + timestamp)

, Если бы первый, Вы - большая часть пути к GUID, и я не волновался бы об этом. Если последний, то см. сообщение Karg о том, как Вы столкнетесь с коллизиями в конечном счете.

17
ответ дан kenorb 30 April 2012 в 04:11
поделиться

В то время как были получившие широкую огласку проблемы с MD5 из-за коллизий, НЕУМЫШЛЕННЫЕ коллизии среди случайных данных чрезвычайно редки . С другой стороны, если бы Вы хешируете на имени файла, это не случайные данные, и я ожидал бы коллизии быстро.

4
ответ дан acrosman 30 April 2012 в 04:11
поделиться

Действительно не имеет значения, как, вероятно, это; это возможно. Это могло произойти на первых двух вещах, которые Вы хешируете (очень вряд ли, но возможный), таким образом, необходимо будет поддерживать коллизии с начала.

1
ответ дан Karg 30 April 2012 в 04:11
поделиться

Грубое эмпирическое правило для коллизий является квадратным корнем диапазона значений. Ваш сигнал MD5, по-видимому, 128 битов длиной, таким образом, Вы собираетесь быть вероятными видеть коллизии выше и вне 2^64 изображения.

10
ответ дан Will Dean 30 April 2012 в 04:11
поделиться

S3 может иметь подкаталоги. Просто поместите "/" в ключевое имя, и можно получить доступ к файлам, как будто они были в отдельных каталогах. Я использую это, чтобы хранить пользовательские файлы в отдельных папках на основе их идентификатора пользователя в S3.

, Например: "mybucket/users/1234/somefile.jpg". Это не точно то же как каталог в файловой системе, но S3 API имеет некоторые функции, которые позволяют ему работать почти то же. Я могу попросить, чтобы он перечислил все файлы, которые начинаются "с пользователей/1234 /" и это покажет мне все файлы в том "каталоге".

25
ответ дан Eriawan Kusumawardhono 30 April 2012 в 04:11
поделиться

Хотя случайные коллизии MD5 чрезвычайно редки, если ваши пользователи могут предоставлять файлы (которые будут храниться дословно), они могут спроектировать возникновение коллизий. То есть они могут намеренно создать два файла с одинаковой суммой MD5, но с разными данными. Убедитесь, что ваше приложение может обрабатывать этот случай разумным образом, или, возможно, используйте более сильный хэш, например SHA-256.

7
ответ дан 23 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: