Прежде чем кто-то сможет прокомментировать алгоритмы хеширования, полезно иметь хотя бы фундаментальное понимание основополагающих концепций и принципов. Все ответы, которые до сих пор были направлены на бесконечное встраивание типов, полностью излишни, но, что еще хуже, приводят к ненадежным результатам, если хэшируется строка в юникоде.
Первое, что вам нужно понять, это то, что алгоритмы хеширования и шифрования работают на уровне байтов. Это означает, что им все равно, что вы хешируете или шифруете. Вы можете хешировать целые числа, символы, обычный ASCII, полный юникод, байты, длинные слова и т. Д. Алгоритм не имеет значения.
При работе со строками ЕДИНСТВЕННОЕ, что вы должны гарантировать, - это то, что внутренняя функция вашей библиотеки хэширования возвращает AnsiString в функции, которая выплевывает полученный хеш. Вот и все. Это все, что имеет значение.
Ваш фактический код для ВАШЕГО проекта может (и должен) быть основан на обычном вводе строки, который отображается на unicodestring в Delphi 2009. Вы не должны типизировать что-либо для ansistring или rawbytestring. Тем самым вы немедленно создаете сломанный хеш, если и когда пользователь пытается что-то хэшировать за пределами набора символов ANSI. А в мире хеширования сломанный хеш является ненадежным и ненадежным.