5.3. UUID Version 3
5.3. UUID Version 3
UUIDv3 用于根据名称生成 UUID, 这些名称取自某个命名空间并在该命名空间内唯一, 如 Section 6.5 所述.
UUIDv3 值通过对给定的 Namespace ID 值 (Section 6.6) 与所需名称值的拼接结果计算 MD5 散列 [RFC1321] 来创建; 在拼接之前, 二者都已按照其命名空间的标准或约定转换为规范八位组序列, 并采用网络字节序. 然后, 此 MD5 值用于填充 UUID 布局的全部 128 位. 随后, UUID version 和 variant 按 Sections 4.2 和 4.1 的定义替换相应位. Appendix A.2 中可见这种位替换的示例.
关于在给定命名空间内选择所需名称规范格式的信息, 可在 Section 6.5 的 "A note on names" 标题下找到.
在可能的情况下, SHOULD 使用 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: UUIDv3 字段和位布局
字段定义:
md5_high: 布局的前 48 位填入计算所得 MD5 值中最高有效、最左侧的 48 位. 占据第 0 到 47 位 (八位组 0-5).
ver: Section 4.2 定义的 4 位 version 字段, 设置为 0b0011 (3). 占据第 6 个八位组的第 48 到 51 位.
md5_mid: 布局中的另外 12 位, 由计算所得 MD5 值中紧随 md5_high 之后的 16 位的最低有效、最右侧 12 位组成. 占据第 52 到 63 位 (八位组 6-7).
var: Section 4.1 定义的 2 位 variant 字段, 设置为 0b10. 占据第 8 个八位组的第 64 和 65 位.
md5_low: 布局中紧随 var 字段之后的最后 62 位, 填入计算所得 MD5 值最后 64 位中的最低有效、最右侧位. 占据第 66 到 127 位 (八位组 8-15).