Skip to main content

5.3. UUID Version 3 (UUID 版本 3)

5.3. UUID Version 3 (UUID 版本 3)

UUIDv3 用于从某个命名空间中提取的名称生成 UUID, 并且这些名称在该命名空间内是唯一的, 如第 6.5 节所述。

UUIDv3 值通过计算给定命名空间 ID 值 (第 6.6 节) 与所需名称值连接后的 MD5 哈希 [RFC1321] 来创建, 在两者都已按其命名空间的标准或约定转换为八位组的规范序列后, 以网络字节顺序表示。然后使用此 MD5 值填充 UUID 布局的所有 128 位。然后, UUID 版本和变体替换各自的位, 如第 4.2 节和第 4.1 节所定义。此位替换的示例可在附录 A.2 中找到。

有关在给定命名空间内选择所需名称的规范格式的信息, 可在第 6.5 节标题为 "关于名称的说明" 的部分找到。

在可能的情况下, 应使用 UUIDv5 代替 UUIDv3。有关 MD5 安全考虑的更多信息, 请参见 [RFC6151]。

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| md5_high |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| md5_high | ver | md5_mid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| md5_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| md5_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

图 7: UUIDv3 字段和位布局

字段定义:

md5_high: 布局的前 48 位用计算出的 MD5 值中最高有效的左侧 48 位填充。占用位 0 到 47 (八位组 0-5)。

ver: 由第 4.2 节定义的 4 位版本字段, 设置为 0b0011 (3)。占用八位组 6 的位 48 到 51。

md5_mid: 布局的另外 12 位, 由紧跟 md5_high 之后的 16 位中最低有效的右侧 12 位组成, 来自计算出的 MD5 值。占用位 52 到 63 (八位组 6-7)。

var: 由第 4.1 节定义的 2 位变体字段, 设置为 0b10。占用八位组 8 的位 64 和 65。

md5_low: 紧跟 var 字段之后的布局的最后 62 位, 用计算出的 MD5 值的最后 64 位中最低有效的右侧位填充。占用位 66 到 127 (八位组 8-15)。