c# - 如何为字符串生成 GUID?

标签 c#

我在为字符串生成 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/

相关文章:

c# - 带有 ListView 和 Repeater 的 ASP.NET 中的模型 View 展示器

c# - 在 ASP.NET 中实现数据绑定(bind)的正确方法

c# - 为 MonoGame 编译着色器

C#.NET - 无法添加或更新子行 : a foreign key constraint fails

C# 访问另一个项目的 app.config 时出现问题

c# - 使用 C# 任务从 SQL 获取行

c# - SerialPort输入输出缓冲区一样吗?

java - 使用 Xfinium.Graphics 在 PDF 文档上渲染椭圆形

c# - 获取所选列表框项目的对象信息

c# - 如何使用 BeginReceive 接收多个部分?