我在为字符串生成 GUID 时遇到问题 - 例如:
Guid g = New Guid("Mehar");
如何计算 "Mehar"
的 GUID?我遇到异常。
最佳答案
这个线程很旧,但这就是我们解决这个问题的方法:
由于 .NET 框架中的 Guid 是任意 16 字节,或者分别是 128 位,您可以通过对生成 16 字节哈希的字符串应用任何哈希函数,然后将结果传递给 Guid 构造函数,从任意字符串计算 Guid。
我们决定使用 MD5 哈希函数,示例代码如下所示:
string input = "asdfasdf";
using (MD5 md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
Guid result = new Guid(hash);
}
请注意,这个 Guid 生成本身有一些缺陷,因为它取决于散列函数的质量!如果您的散列函数为您使用的大量字符串生成相等的散列,它将影响软件的行为。
下面列出了生成 128 位摘要的最流行的哈希函数:
- RIPEMD(碰撞概率:2^18)
- MD4(碰撞概率:确定)
- MD5(碰撞概率:2^20.96)
请注意,还可以使用其他哈希函数来生成更大的摘要并简单地截断它们。因此,使用更新的哈希函数可能是明智的。列举一些:
- SHA-1
- SHA-2
- SHA-3
今天(2013 年 8 月)160 位 SHA1 散列可以被认为是一个不错的选择。
关于c# - 如何为字符串生成 GUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190890/