Подтвердить что ты не робот

Является ли хэш GUID уникальным?

Я создаю GUID (как строку) и получаю хэш. Можно ли считать этот хэш уникальным?

4b9b3361

Ответ 1

Не так надежно уникально, как сам GUID, нет.

Просто для расширения, вы уменьшаете свою уникальность в 4 раза, переходя от 16 байт до 4 байтов возможных комбинаций.

Как указано в комментариях, размер хеша будет иметь значение. 4-байтная вещь была предположением, в лучшем случае ужасным, что я могу ее использовать в .NET, где размер хэша по умолчанию составляет 4 байта (int). Таким образом, вы можете заменить то, что я сказал выше, с любым размером байта, который может иметь ваш хэш.

Ответ 3

Одним словом, нет.

Предположим, что ваш хэш имеет меньшее количество бит, чем GUID, по принципу голубины, должно существовать более одного отображения некоторого GUID- > хэша просто потому, что меньше хэшей, чем GUIDS.

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

Ответ 4

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

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

Ответ 5

Это не гарантируется, из-за хеш-коллизий. Сам GUID почти гарантированно.

По практическим соображениям вы, вероятно, можете предположить, что хэш уникален, но почему бы не использовать сам GUID?

Ответ 6

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

fyi. Хорошее описание работы хеш-таблиц, прочитайте принятый ответ Что такое hashtables и hashmaps и их типичные варианты использования?

Ответ 7

Если вы используете криптографический хеш (MD5, SHA1, RIPEMD160), хэш будет уникальным (по сравнению с кодовыми ошибками, которые очень маловероятны - SHA1 используется, например, для цифровых подписей, а MD5 также устойчив к конфликтам на случайных входах). Хотя, почему вы хотите хэш-код GUID?

Ответ 8

Я хотел бы хэшировать GUID до размера X с осознанием того, что иногда у меня есть 10 или меньше GUID в наборе, чтобы я мог избежать короткого хэша без коллизий, чем если бы у меня было 10 000 000 GUID в наборе. Я просто хотел бы иметь возможность указать размер хеша, когда я вызываю функцию.