




Не так надежно уникален, как сам GUID, нет.
Просто чтобы расширить, вы уменьшаете свою уникальность в 4 раза, переходя с 16 до 4 байтов возможных комбинаций.
Как указано в комментариях, размер хеша будет иметь значение. 4 байта были предположением, в лучшем случае ужасным, что я знаю, что его можно использовать в .NET, где размер хэша по умолчанию составляет 4 байта (int). Таким образом, вы можете заменить то, что я сказал выше, любым размером байта вашего хэша.
4, если алгоритм хеширования идеален и хэш содержит в 4 раза меньше битов, чем GUID - оба из которых, вероятно, будут различаться в зависимости от контекста, верно?
Криптографические хэши (например, MD5, SHA1) составляют 16-20 или более байтов. Хешируя GUID с таким хешем, он не уменьшит уникальность.
Фактически, риск коллизии может увеличивать после хеширования, даже если хэш больше, чем GUID. Это зависит от алгоритма.
Хэш по определению «менее» уникален, чем оригинал. [Кстати, GUID статистически уникален]. 4-байтовый хэш весьма вероятно будет иметь коллизии.
Это должно быть не гарантируется из-за хеш-коллизии. Сам GUID почти гарантированно будет.
Из практических соображений вы, вероятно, можете предположить, что хэш уникален, но почему бы не использовать сам GUID?
Неа.
См. Здесь, если вам нужен мини-идентификатор GUID: https://devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Одним словом, нет.
Предположим, что ваш хэш имеет меньше битов, чем GUID, по принципу голубиного отверстия должно существовать более одного сопоставления некоторого GUID -> хеша просто потому, что хешей меньше, чем GUID.
Если мы предположим, что хэш имеет большее количество битов, чем GUID, существует очень малая, но конечная вероятность столкновения, если вы используете хорошую хеш-функцию.
Никакая хеш-функция, уменьшающая блок данных произвольного размера до числа битов фиксированного размера, не будет производить сопоставление 1 к 1 между ними. Всегда будет существовать вероятность того, что два разных блока данных будут сокращены до одной и той же последовательности битов в хэше.
Хорошие алгоритмы хеширования сводят к минимуму вероятность этого, и, как правило, чем больше бит в хеш-коде, тем меньше вероятность коллизии.
Нет, и я бы не стал предполагать уникальность какого-либо хеш-значения. Это не имеет значения, потому что хеш-значения не обязательно должны быть уникальными, их просто нужно равномерно распределять по своему диапазону. Чем равномернее распределение, тем меньше коллизий (в хеш-таблице). Меньшее количество конфликтов означает лучшую производительность хеш-таблицы.
fyi Для хорошего описания того, как работают хеш-таблицы, прочтите принятый ответ на Что такое хэш-таблицы и хэш-карты и их типичные варианты использования?
Если вы используете криптографический хеш (MD5, SHA1, RIPEMD160), хеш будет уникальным (по модулю коллизий, которые очень маловероятны - SHA1 используется, например, для цифровых подписей, а MD5 также устойчив к коллизиям на случайные входы). Хотя, почему вы хотите хешировать GUID?
Кроме того, большинство ответов являются случайными и менее полезными, чем могли бы быть, потому что никто на самом деле не понимает вопрос и его основной смысл. Разъяснение сделало бы этот вопрос и ответы на него более полезными.