Я хочу создать целочисленный хэш-код для строк, который останется постоянным навсегда; т.е. одна и та же строка должна всегда приводить к одному и тому же хэш-коду.Постоянный hashcode для строк
Хеш не должен быть криптографически защищен, он не будет использоваться для паролей или конфиденциальных данных.
Моя первая попытка состояла в использовании .net framework string.GetHashCode(). Однако при чтении источников я нашел следующий commment:
// We want to ensure we can change our hash function daily. // This is perfectly fine as long as you don't persist the // value from GetHashCode to disk or count on String A // hashing before string B. Those are bugs in your code. hash1 ^= ThisAssembly.DailyBuildNumber;
Это показывает, что хэш-код не будет оставаться постоянным.
Если да, имеет ли каркас другой способ генерации повторяемых хэш-кодов? Или код из GetHashCode станет разумной отправной точкой для реализации моего собственного?
Я ищу что-то как можно более легкое и быстрое.
Я нашел System.Security.Cryptography.MD5, но это кажется излишним для простого хэш-кода int32, и я беспокоюсь о накладных расходах. По крайней мере, это потребует преобразования из строки в массив байтов и от байтового массива к int, а также для создания нового объекта MD5()
для каждого хэша или управления некоторым статическим общим объектом MD5().
Если вы используете Google для «алгоритма строкового хэш-кода», вы получите хорошие результаты. Нет необходимости кому-то копировать код и размещать его здесь. – usr
Мне не нужен образец кода неизвестного качества для генерации хэш-кода, я ищу метод .net framework или комбинацию методов, поскольку это кажется фундаментальной необходимостью для любой структуры. Я был чрезвычайно удивлен тем, что string.GetHashCode, по-видимому, не полезен для этой цели, и я не смог найти подходящую альтернативу. Я бы также ожидал, что ответ поможет другим, а также мне, который показывает, где эта функциональность скрыта в рамках, или, альтернативно, что она не существует. – HugoRune
Поисковый запрос, который, наконец, дал мне хороший результат, был «.net stable string hash code». – usr