Skip to main content

Appendix B. Illustrative Examples (示例说明)

Appendix B. Illustrative Examples (示例说明)

以下部分包含示例说明, 用于展示如何使用 UUIDv8 (第 5.8 节) 进行自定义和/或基于实验应用的逻辑。以下示例未经过本文档中其他算法所经历的相同严格测试, 原型设计和反馈循环。作者鼓励实现者创建自己的 UUIDv8 算法, 而不是使用本节中定义的项目。


B.1. Example of a UUIDv8 Value (Time-Based) (UUIDv8 值示例 (基于时间))

此 UUIDv8 示例测试向量使用一个众所周知的 64 位 Unix Epoch 时间戳, 具有 10 纳秒精度, 截断为最低有效的最右位, 以填充 custom_acustom_b 的前 60 位, 同时将这两个段之间的版本位设置为版本值 8。

设置变体位; 最后一段 custom_c 填充随机数据。

时间戳为 2022 年 2 月 22 日星期二下午 2:22:22.000000 GMT-05:00, 表示为 0x2489E9AD2EE2E00 或 164555774200000000 (10 纳秒步长)。

-------------------------------------------
field bits value
-------------------------------------------
custom_a 48 0x2489E9AD2EE2
ver 4 0x8
custom_b 12 0xE00
var 2 0b10
custom_c 62 0b00, 0xEC932D5F69181C0
-------------------------------------------
total 128
-------------------------------------------
final: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0

图 27: UUIDv8 基于时间的示例说明


B.2. Example of a UUIDv8 Value (Name-Based) (UUIDv8 值示例 (基于名称))

根据第 5.5 节, 想要使用现代哈希算法的基于名称的 UUID 必须在 UUIDv8 空间内创建。这些可以利用更新的哈希算法, 例如 SHA-256 或 SHA-512 (由 [FIPS180-4] 定义), SHA-3 或 SHAKE (由 [FIPS202] 定义), 甚至尚未定义的算法。

附录 A.4 中 SHA-1 计算的 SHA-256 版本在图 28 中详细说明, 作为说明如何实现这一点的示例。本节中基于名称的 UUIDv8 值的创建遵循第 5.5 节中定义的相同逻辑, 区别在于使用 SHA-256 代替 SHA-1。

字段映射和所有值在图 29 中说明。最后, 为了进一步说明版本和变体的位交换以及 SHA-256 值未使用/丢弃的部分, 请参见图 30。对于产生任意大小输出的安全哈希算法 (例如 SHAKE 中的那些), 一个重要注意事项是输出哈希必须为 128 位或更大。

Namespace (DNS):       6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
----------------------------------------------------------------
SHA-256:
5c146b143c524afd938a375d0df1fbf6fe12a66b645f72f6158759387e51f3c8

图 28: UUIDv8 示例 SHA256

-------------------------------------------
field bits value
-------------------------------------------
custom_a 48 0x5c146b143c52
ver 4 0x8
custom_b 12 0xafd
var 2 0b10
custom_c 62 0b00, 0x38a375d0df1fbf6
-------------------------------------------
total 128
-------------------------------------------
final: 5c146b14-3c52-8afd-938a-375d0df1fbf6

图 29: UUIDv8 基于 SHA-256 名称的示例说明

A: 5c146b14-3c52-4afd-938a-375d0df1fbf6-fe12a66b645f72f6158759387e51f3c8
B: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
C: 5c146b14-3c52-8afd-938a-375d0df1fbf6
D: -fe12a66b645f72f6158759387e51f3c8

图 30: UUIDv8 示例版本/变体位交换和丢弃的 SHA-256 段

检查图 30:

  • 行 A 详细说明了完整的 SHA-256 作为十六进制值, 插入了短划线。

  • 行 B 详细说明了必须覆盖的版本和变体十六进制位置。

  • 行 C 详细说明了在覆盖 ver 和 var 后的最终值。

  • 行 D 详细说明了原始 SHA-256 计算中丢弃的剩余值。