首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么.NET GUID中有破折号?

为什么.NET GUID中有破折号?
EN

Stack Overflow用户
提问于 2018-03-12 04:52:29
回答 2查看 0关注 0票数 0

为什么.NET GUID中有破折号?在大多数GUID的实现中是否有破折号,还是仅仅是微软的东西?

签,

741ecf77-9c92-4435-8e6b-85975bd13452

EN

回答 2

Stack Overflow用户

发布于 2018-03-12 13:16:02

从技术上讲,GUID中没有“破折号”。GUID是一个128位的值,通常以下面的方式存储(这里使用C#来表示结构):

代码语言:txt
复制
public struct Guid
{
  public ulong Data1;
  public ushort Data2;
  public ushort Data3;
  public fixed byte Data4[8];
}

破折号在GUID 的字符串表示中。

破折号是可选的,在GUID的字符串表示中不需要。

也就是说,破折号的位置在哪里与GUID是如何产生有关,但历史语义不再适用,这是有历史原因的。

票数 0
EN

Stack Overflow用户

发布于 2018-03-12 14:04:17

在UUID(通用唯一标识符)规范的初始版本中,每个数据元素都具有语义含义:

{ time_low } - { time_mid } - { time_high_and_version } - {  clock_seq_and_reserved clock_seq_low } - { node_id }

这些元素旨在提供时间(时间位)和空间(主机位)的唯一性。

版本历史

由于在2 ^ 1024个随机位的密钥空间中发生碰撞的数学概率被认为是天文数字上不可能的,因此出于安全和隐私的原因,UUID规范的后续版本已经淘汰了时间和主机数据。

唯一保留任何含义的元素是版本位和保留位。

第3版UUID来自URI或其他专有名称的MD5散列。

第4版是随机数据生成的,目前是您在野外可以看到的最常见的实现。

第5版源自SHA1哈希。

存储格式

由于在RFC中为连接UUID的ASCII格式指定了连字符,即使各个部分不再保留其原始含义,但如果您需要互操作性,它们仍然是必需的。

UUID有时也会以base64或ascii85编码的字符串形式存储,以节省空间用于传输不是二进制安全的传输,并且不需要遵守RFC。

代码语言:txt
复制
Ascii:   3F2504E0-4F89-11D3-9A0C-0305E82C3301
Base64:  7QDBkvCA1+B9K/U0vrQx1A
Ascii85: 5:$Hj:Pf\4RLB9%kU\Lj

参考文献:

RFC4122(专门针对UUID格式的ABNF描述参见第3页)

WikipediaGUIDUUID

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档