Предположим, у меня есть "длинный" хеш, например, 16-байтовый MD5 или 20-байтовый SHA1.
Я хочу уменьшить этот хеш до 4 байтов для целей GetHashCode()
.
Во-первых, я прекрасно знаю, что получу больше столкновений. Это совершенно нормально в моем случае, но я все же предпочел бы получить как можно меньше столкновений.
Есть несколько решений моей проблемы:
- Я мог бы взять 4 первых байта хеша.
- Я мог бы взять 4 последних байта хеша.
- Я мог бы взять 4 случайных байта хеша.
- Я мог бы создать хэш хэша, включающий классические умножения простых чисел.
Есть ли другие солютоны, о которых я не думал? И что еще более важно, какой метод даст мне самый уникальный хэш-код? В настоящее время я предполагаю, что они почти эквивалентны.
Microsoft решила, что токен открытого ключа сборки - это последние 8 байтов хеша SHA1 ее открытого ключа, поэтому я, вероятно, пойду к этому решению, но мне хотелось бы знать, почему.