基于字符串生成 Guid

4
我们希望根据某些随机字符串生成一个基于Guid的值。目标是对于给定的字符串,Guid始终相同。
只是为了明确,我的字符串没有格式化为Guid,它可以是"Toto"或"asdfblkajsdflknasldknalkvkndlskfj"等任何字符串。
我知道这将生成与我的输入字符串一样唯一的一些Guid,但这不是问题所在。

1
StackOverflowException - Patrick Hofman
1
我认为你可能想要哈希一个GUID?然而,这本身并没有太多意义。 - TheGeneral
2
我认为使用 Guid 并没有太多意义——使用任何哈希函数会更有意义。您为什么认为需要一个 Guid? - Larce
XD Sorry, I corrected - J4N
你可以查看这个答案获取一些想法:https://dev59.com/4XI95IYBdhLWcg3wsQP9#6248764 - Timovski
1个回答

9

由于Guid和MD5哈希值都是128位整数,因此您可以使用给定字符串的MD5作为Guid。它会始终产生相同的值:

using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
    byte[] hashBytes = md5.ComputeHash(inputBytes);

    Guid g = new Guid(hashBytes);
}

这个实际上可行。然而请注意,您违反了Guid的策略,因此从理论上讲,在这里使用Guid毫无意义 - 我会选择一个新哈希的简单字符串。当然,您可以按照自己的喜好格式化它,并使其看起来像是一个Guid - 即使它在理论上不是。 - Larce
无论如何,我不会再使用MD5了。如果输入分布与原始Guid分布一样好,MD5算法可能会增加碰撞的可能性。 - arekzyla
不做OP要求的事情是一个有效的论点,@arekzyla。 - Patrick Hofman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接