Создайте свои собственные коллизии MD5

У меня были хорошие результаты с https://github.com/patrickschur/language-detection , и я использую его в производстве:

  • Он использует нграммы в языках для определить наиболее вероятный язык (чем длиннее ваша строка / чем больше слов, тем точнее он будет), что кажется надежным проверенным методом.
  • Поддерживается 110 языков, но вы также можете ограничить количество языков только теми, кто вас интересует.
  • Обучающий и языковой детектор можно легко улучшить / настроить. Он использует Всеобщую декларацию прав человека на каждом из языков в качестве основы для определения языка, но если вы знаете, с какими типами предложений вы сталкиваетесь, вы можете легко расширить или заменить используемые тексты на каждом языке и быстро получить лучшие результаты. «Тренировать» эту библиотеку, чтобы стать лучше, легко.
  • Я бы предложил увеличить setMaxNgrams (я установил его на 9000) в Трейнере и запустить его один раз, а затем также использовать эту настройку в классе детектора языка. Изменение числа ngrams немного неинтуитивно (мне пришлось просмотреть код, чтобы выяснить, как он работает), что является недостатком, и по умолчанию (310), на мой взгляд, всегда слишком мало. Больше нграмм делает гадание намного лучше.
  • Поскольку библиотека очень мала, было относительно легко понять, что происходит и как ее настроить.

Мое использование: я анализирую электронные письма для системы CRM, чтобы узнать, на каком языке написано электронное письмо, поэтому отправка текста в стороннюю службу не была возможной. Несмотря на то, что Всеобщая декларация прав человека, вероятно, не является лучшей основой для классификации языка электронных писем (поскольку электронные письма часто имеют формальные части, такие как приветствия, которые не являются частью Декларации прав человека), она определяет правильный язык примерно в 99% случаи, если в нем хотя бы 5 слов.

Обновление : мне удалось улучшить распознавание языка в электронных письмах до 100% при использовании библиотеки определения языка следующими способами:

  • Добавить дополнительные общие фразы к (соответствующие) образцы языка, такие как «Привет», «С наилучшими пожеланиями», «С уважением». Подобные выражения не используются во Всеобщей декларации прав человека. Часто используемые фразы помогают распознавать язык, особенно формульные, которые часто используют мои люди («Привет», «Хорошего дня»), если вы анализируете человеческое общение.
  • Установите максимальную длину ngram на 4 (вместо значения по умолчанию 3).
  • Держите maxNgrams на 9000, как и раньше.

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

43
задан russau 1 June 2009 в 03:50
поделиться

5 ответов

These following two different 128 byte sequences hash to the same:

MD5 Hash: 79054025255fb1a26e4bc422aef54eb4

The differences below are highlighted (bold). Sorry it's kind of hard to see.

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89 
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

and

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89 
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

The visualization of the collision/block1 (Source: Links.Org)

alt text

The visualization of the collision/block2 (Source: Links.Org)

alt text

51
ответ дан 26 November 2019 в 23:05
поделиться

I would take a look at Hashcash. With an effective hash algorithm, like md5, the time to calculate a collision to exponential with the number of bits. What Hashcash does is calculates partial collisions. That is, a match of say the lower 16 bits of the hash. To get the lower 16 bits to match, one would have to try hashing 2^15 different combinations on average. If you know how long it takes to come up with a 16, 24, or 32 bit collision, then you can easily calculate out the time for higher numbers of bits.

1
ответ дан 26 November 2019 в 23:05
поделиться

Если вы говорите о том, насколько вероятно прямое столкновение - такое, в котором нет преднамеренной попытки вызвать его, - то вы будете разочарованы: вам нужно будет генерировать в среднем 2 ^ 64 открытых текста, прежде чем вы сможете ожидать столкновения, и это значительно больше, чем вы сможете сделать в разумное (или даже _не_ разумное) время.

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

2
ответ дан 26 November 2019 в 23:05
поделиться

Суть таких хешей в том, что коллизии крайне маловероятны. Вы не создадите его случайно - ваша машина почти наверняка умрет от старости, прежде чем вы добьетесь успеха. Весь смысл использования хэша исчез бы, если бы вы могли разумно генерировать коллизии!

re не создаст его случайно - ваша машина почти наверняка умрет от старости, прежде чем вы добьетесь успеха. Весь смысл использования хэша исчез бы, если бы вы могли разумно генерировать коллизии!

re не создаст его случайно - ваша машина почти наверняка умрет от старости, прежде чем вы добьетесь успеха. Весь смысл использования хэша исчез бы, если бы вы могли разумно генерировать коллизии!

-3
ответ дан 26 November 2019 в 23:05
поделиться

Трудно сделать это только с текстовыми файлами, AFAIK. Вы можете получить несколько столкновений, но сделать их также из [a-zA-Z] непросто (пока).

С другой стороны, если вам просто нужны два «значимых» - ища файлы с одинаковым хешем, вы можете сделать это, например, с помощью PostScript: иметь разные двоичные капли, вызывающие коллизию, и использовать условное выражение для отображения другого вывода соответственно.

См., например, эту проблему ] (часть H2) и решение . Например, этот файл PS и этот имеют одинаковую сумму MD5, но оба они представляют собой правильно сформированные файлы PostScript, в которых при открытии содержится совершенно другой текст.

3
ответ дан 26 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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