【问题标题】:C# UUID Version 4 standalone generator and UUID validationC# UUID 版本 4 独立生成器和 UUID 验证
【发布时间】:2014-04-10 00:20:11
【问题描述】:

对于我的分布式存储密钥,我想使用 UUID v4,而 .NET Framework 的 System.Guid 正是这样。但是,如果 Mono 提供相同的 v4,我现在无法测试? C#/F# 中是否有独立的 v4 生成器?是否有说明 .NET/Mono GUID 始终为版本 4 的规范? (谷歌搜索,找不到)

此外,我想对 GUID v4 进行一些修改。鉴于它的格式是xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,我想用自定义的十六进制数字替换 4。当我的 GUID 在我的系统中生成时,我需要它来嵌入一种纪元信息,并且我知道纪元的最大数量永远不会达到 HEX f

问题是这是否安全且面向未来?您是否知道有任何软件以某种方式验证 Guid,而不是“它必须是 128 位”?我害怕把例如5 而不是 4 可能会破坏某些东西,例如PostgreSQL uuid 列类型或类似情况。而且我无法测试所有可能发生这种情况的情况。我用System.Guid.Parse() 测试了所有数字而不是4,它工作正常,但我不知道这是运气还是规范。

【问题讨论】:

  • 很明显,移植单声道源不到10分钟……第二部分还是个问题。

标签: c# postgresql mono guid uuid


【解决方案1】:

根据 UUID 规范 http://www.ietf.org/rfc/rfc4122.txt

我引用(这是在 v4 部分下):

符合 URN 语法: UUID 的字符串表示完全兼容 URN 语法。从面向位的内存中转换时 将 UUID 表示为 URN,必须注意 严格遵守字符串中提到的字节顺序问题 代表部分。

验证机制: 除了判断UUID的时间戳部分是否 是在未来,因此还不能分配,没有 用于确定 UUID 是否“有效”的机制。

** 我认为如果无法进行验证,只要时间戳是未来的,任何软件都不应该抱怨您手动生成的 UUID

【讨论】:

  • 谢谢!想知道是否有任何软件确实进行了此验证。规范只说这是唯一可能的方式,但没有说这是强制性的。 System.Guid.Parse 愉快地吃来自未来的 GUID
  • 也许您应该开始在几个平台上搜索 UUID 规范的严格性,并将您的软件基于该研究。
  • 鉴于 v4 是完全随机的,而 v6+ 可能是任意的 - 任何人都不太可能进行验证。我将停止在这里积极研究,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 2021-11-04
  • 1970-01-01
  • 2016-02-25
  • 2016-10-23
  • 2017-06-25
相关资源
最近更新 更多