Существует ли SHA, который гарантирует создание уникального хэша? - PullRequest
0 голосов
/ 29 августа 2018

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

Насколько я понимаю, обычные алгоритмы в стиле SHA-512 с учетом того, что входная строка гарантированно является уникальной, не гарантируют получение значения хеш-функции, которое также гарантированно является уникальным.

Существует ли алгоритм хеширования, который будет генерировать уникальный хэш?

Точнее говоря, есть ли такой алгоритм, поддерживаемый NodeJS 10.9 или лучше, из коробки?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Длина хэша SHA-512 составляет 64 байта (512 бит), что дает вам комбинации значений 10 154 . Так что у него гораздо меньше (я имею в виду, очень, очень) меньше шансов получить тот же хеш.

Насколько это намного меньше, подумайте о весе Солнца в граммах (который в миллион раз больше, чем у зародыша). Если любая другая планета весом 10 154 граммов, даже миллионы миллионов солнц вместе не могут быть равны этому количеству.

Итак, очень мало, это значит никогда. Даже адреса биткойнов используют этот метод в качестве адреса кошелька. Если вы случайно найдете эту комбинацию, вы станете миллиардером. Я обещаю

enter image description here

0 голосов
/ 29 августа 2018

Большинство алгоритмов хеширования делают все возможное, чтобы избежать коллизий. SHA 512 должен подойти, если не SHA 256. Обратите внимание, что если вы видите коллизии во входных данных, в хэше будут коллизии, и в этом случае я рекомендую добавить что-то еще, вероятно, уникальное для двух отдельных учетных записей - например, в качестве метки времени они были созданы - перед вводом значения в хеш. Это будет прекрасно работать, если оба входа неизменны и никогда не меняются в учетной записи.

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

Этот ответ также связан с: При использовании хэшей SHA-256 в качестве первичного ключа, можно ли игнорировать возможность коллизий?

...