Довольно старая ветка, но мы решили эту проблему:
Поскольку Guid из .NET Framework имеют произвольные 16 байтов или, соответственно, 128 битов, вы можете вычислить Guid из произвольных строк, применив к строке любую хэш-функцию, которая генерирует 16-байтовый хэш, и затем передает результат в конструктор Guid.
Мы решили использовать хеш-функцию MD5, и пример кода может выглядеть следующим образом:
string input = "asdfasdf";
using (MD5 md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(input));
Guid result = new Guid(hash);
}
Обратите внимание, что у этого поколения Guid есть несколько недостатков, поскольку зависит от качества хеш-функции! Если ваша хеш-функция генерирует равные хеш-значения для большого количества используемой строки, это повлияет поведение вашего программного обеспечения.
Вот список самых популярных хеш-функций, которые генерируют 128-битный дайджест:
- RIPEMD (вероятность столкновения: 2 ^ 18)
- MD4 (вероятность столкновения: точно)
- MD5 (вероятность столкновения: 2 ^ 20,96)
Обратите внимание, что можно использовать и другие хеш-функции, которые генерируют большие дайджесты и просто усекают их. Поэтому может быть разумно использовать более новую хэш-функцию. Чтобы перечислить некоторые:
Сегодня (август 2013 г.) 160-битный хэш SHA1 можно считать хорошим выбором.