Какой хороший способ в .NET вычислить короткую хэш-строку длинной строки с относительно небольшим количеством коллизий?

#.net #string-hashing

#.net #хэширование строк

Вопрос:

Мне нужно вычислить хэш строки идентификатора, которая выглядит примерно так 00000E11002F68FF21B459BFA33A1BFCB50E0070011167CCBF9AD994E8AAE2BFEBEEE17EC00000000010C000011167CCBF9AD994E8AAE2BFEBEEE17EC0000F083227C000000000000E11002F68FF21B459BFA33A1.

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

String.GetHashCode() Достаточно ли хорош для этой цели? У меня могло бы быть несколько сотен файлов в каталоге одновременно.

Комментарии:

1. String.GetHashCode() нельзя полагаться на одинаковую работу между разными версиями среды выполнения или даже просто между разными процессами.

2. Просто создайте хэш MD5 и уменьшите его размер с помощью XOR, а затем создайте 64.