Может ли хэш 2 разных входов быть одинаковым? - PullRequest
0 голосов
/ 02 ноября 2018

Согласно моему пониманию, хеширование - это процесс создания уникального вывода фиксированной длины (допустим, 64-битного) для ввода ЛЮБОЙ длины. (поправьте меня, если я не прав)

Так что, если я возьму все (x) возможные 64-битные хеш-значения, которые может создать хеш-функция, и добавлю 0 или 1 в конце. Я получаю список размером 2x (где каждый хеш имеет длину 65 бит).

Если я передам все 2х комбинации в качестве входных данных для одной и той же хеш-функции, как она может генерировать уникальный хеш-код для всех входов?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

По принципу Pigeonhole столкновения хэшей неизбежны. То есть m1! = M2 и H (m1) = H (m2)

Вы не можете генерировать уникальные хэши для входов. С очень малой вероятностью произойдет столкновение. Даже внутри 2 ^ 64 возможных значений может возникнуть коллизия для хэш-функции с 64-битным выводом.

Лучше использовать функцию Hash, например SHA3 , и, если вы действительно хотите, чтобы они были уникальными, сравните с предыдущими хешами, которые вы сгенерировали.

  • Семейство SHA3 может генерировать 224, 256, 384 или 512-битные выходные данные.
0 голосов
/ 02 ноября 2018

Вы правы. Это называется столкновением хэшей, и это реальная вещь. Причина не в том, что количество хэшей настолько велико, что подобные типы встречаются редко. Ваш пример с 64 битами немного нереалистичен. 256 бит или 512 бит - более вероятный сценарий. (Даже 128 больше не считается достаточно сильным.) И диапазон хэшей в этом случае настолько велик, что найти входные данные, которые создают коллизию хешей, очень сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...