我怎样才能为一个字符串生成一个GUID?

我在为字符串生成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.Default.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哈希算是一个不错的选择。


    我相当肯定你已经混淆了System.Guid与给定字符串的散列(比如SHA-256)。

    请注意,选择密码安全散列算法时,MD5,SHA0和SHA1通常都被认为是无效的。 SHA2及以上仍然可用。


    您正在寻找的可能是生成版本3或版本5的UUID,这是基于UUID的名称。 (建议使用版本5)。 我不认为.NET框架已经支持它。 请参阅http://en.wikipedia.org/wiki/Universally_Unique_Identifier

    我做了几次谷歌搜索,看看能否在Win32 API中找到某些东西,但没有出现。 不过,我相信.NET框架有一些隐藏的地方,因为据我所知,当在.NET中生成一个COM对象,并且你没有提供一个明确的GUID时,那么.NET框架会生成一个名称基于UUID来创建一个定义明确的ClassID和InterfaceID,即每次重新编译时都不会改变的UUID(如VB6)。 但是这可能是隐藏的,所以我想你需要自己实现算法。 幸运的是,.NET提供了MD5和SHA1算法,所以我不认为实现版本3和版本5 UUID应该太难了。

    链接地址: http://www.djcxy.com/p/91433.html

    上一篇: How can I generate a GUID for a string?

    下一篇: Unique Id without submission of form in ajax php