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