从字符串创建一致的GUID或唯一标识符

时间:2016-06-17 03:19:10

标签: c#

说我有一个字符串,比如'70c3bdc5ceeac673'。在C#中是否可以基于此字符串创建类似GUID的结构(DB Column仅接受uniqueidentifier)?我的目标是每次传入该值时都会创建相同的Guid或唯一的sting。我猜本质上就像带有密钥的Hmac SHA1哈希。

2 个答案:

答案 0 :(得分:5)

从SHA256哈希创建Guid似乎是一个简单的选择:

var guid = new Guid(
   System.Security.Cryptography.SHA256.Create()
      .ComputeHash(Encoding.UTF8.GetBytes("70c3bdc5ceeac673")).Take(16).ToArray());

代码丢弃了哈希结果的一半,但它并没有改变相同字符串总是转换为同一个Guid的事实。

或者根据您的要求,只需将字符串转换为字节数组,使用0填充/删除额外内容就足够了。

答案 1 :(得分:0)

如果您知道所有字符串都在16个非宽字符(70c3bdc5ceeac673)内,则可以使用此字符:

// value is your string

var bytes = new byte[16];
Encoding.UTF8.GetBytes(value, 0, value.Length, bytes, 0);
var guid = new Guid(bytes);