У меня уже есть 64-битная хеш-функция в библиотеке (кодирование C), но мне нужно только 48 бит. Мне нужно обрезать 64-битное хэш-значение до 48-битного значения, но это должно быть безопасным образом, чтобы свести к минимуму коллизии.
Хеш-функция — это очень хорошая 64-битная хеш-функция. Он был протестирован с помощью SMHasher (хеш-тестирование «DieHarder») и оказался лучше, чем Murmur2. По словам моих коллег, реализованный в библиотеке алгоритм для 64-битного хеширования — это xxHash, протестированный с помощью SMHasher и получивший Q.Score 10! Для тех, кто хочет его увидеть, исходный код xxHash доступен на github.com: github. com/Cyan4973/xxHash/релизы/последние.
Основная идея состоит в том, чтобы все биты в 64-битном хеш-значении (или его часть) влияли на результирующее 48-битное хэш-значение. Есть ли способ сделать это?
[Поздняя редакция]:
Итак, я реализовал свой собственный генератор 48-битных (квази)-UUID.
Пожалуйста, ознакомьтесь с полным рабочим решением (включая исходный код) здесь: https://stackoverflow.com/a/47895889/4731718.
2^64
64-битных хэшей. Вы не можете поместить их в2^48
48-битных хэшей без того, чтобы по крайней мере2^16
из них не накапливались в одном и том же месте. - person Teepeemm   schedule 02.10.2015UUID 48-bit
иRFC-4122
. Multumesc :)... Никогда не думал, что доживу до того дня, когда этот вопрос перестанет быть отрицательным... хе-хе :) - person סטנלי גרונן   schedule 21.02.2017