Зависит от того, какие свойства вы хотите, чтобы хеш имел.Например, вы могли бы просто написать что-то вроде этого:
public int HashString(string text)
{
// TODO: Determine nullity policy.
unchecked
{
int hash = 23;
foreach (char c in text)
{
hash = hash * 31 + c;
}
return hash;
}
}
До тех пор, пока вы документ , то есть то, как вычисляется хэш, это действительно.Это ни в коем случае не криптографически безопасно или что-то в этом роде, но вы можете сохранить его без проблем.Две строки, которые абсолютно равны в обычном смысле (т.е. без применения культурного равенства и т. Д., В точности одинаковые символы), будут создавать одинаковый хэш с этим кодом.
Проблемы возникают, когда вы полагаетесь на недокументированное хеширование - то есть то, что подчиняется GetHashCode()
, но ни в коем случае не гарантируется, что оно останется неизменным от версии к версии ... как string.GetHashCode()
.
Запись и документирование вашего собственного хэшакак это немного похоже на высказывание: «Эта конфиденциальная информация хешируется с помощью MD5 (или чего-либо еще)».Пока это хорошо определенный хеш, это нормально.
РЕДАКТИРОВАТЬ: Другие ответы предлагали использовать криптографические хеши, такие как SHA-1 или MD5.Я бы сказал, что пока мы не узнаем, что существует требование криптографической безопасности, а не просто стабильности, нет смысла проходить через сложную задачу преобразования строки в байтовый массив и хэширования.Конечно, если хеш равен , предназначенным для использования с чем-либо, связанным с безопасностью, то отраслевой стандарт хеша равен точно , чего вы должны достичь.Но это нигде не упоминалось в этом вопросе.