什么是 UUID v5?
UUID 版本 5 是基于命名空间的 128 位标识符(36 字符字符串),在 RFC 4122 中定义。它结合了:
- 命名空间 UUID:用于范围限定的预定义或自定义 UUID
- 名称:命名空间内用户定义的字符串值
- SHA-1 哈希:用于生成结果的密码学算法
格式示例:2ed6657d-e927-5eb1-9a03-0242ac130003
UUID v5 的工作原理
- 选择一个命名空间 UUID(预定义或自定义)
- 将命名空间 UUID 与名称字符串连接
- 计算连接值的 SHA-1 哈希
- 设置版本位 (0101) 和变体位 (10)
- 将结果以 8-4-4-4-12 的格式拼装为 32 个十六进制数字并插入连字符
优势及注意事项
优势 | 注意事项 |
---|---|
|
|
UUID v5 结构
位 | 内容 |
---|---|
0-47 | SHA-1 哈希的前 48 位 |
48-51 | 版本 (0101 表示 v5) |
52-63 | SHA-1 哈希的下一个 12 位 |
64-65 | 变体 (10 表示 RFC4122) |
66-127 | SHA-1 哈希的剩余 62 位 |
UUID v5 vs. 其他版本
版本 | 基于 | 用例 | 隐私 |
---|---|---|---|
UUID v1 | 时间 + MAC | 时间排序的 ID | ⚠️ 泄露 MAC |
UUID v3 | 命名空间 + MD5 | 确定性 ID | ✅ 私有 |
UUID v4 | 随机 | 安全随机 ID | ✅ 私有 |
UUID v5 | 命名空间 + SHA-1 | 确定性 ID | ✅ 私有 |
UUID v6 | 时间(重排) | 可排序 ID | ⚠️ 泄露 MAC |
UUID v7 | 时间 + 随机 | 可排序 ID | ✅ 私有 |
预定义命名空间
命名空间 | UUID | 用途 |
---|---|---|
DNS | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | 域名 |
URL | 6ba7b811-9dad-11d1-80b4-00c04fd430c8 | URL |
OID | 6ba7b812-9dad-11d1-80b4-00c04fd430c8 | ISO OID |
X.500 DN | 6ba7b814-9dad-11d1-80b4-00c04fd430c8 | X.500 可分辨名称 |
常见用例
- 内容寻址:为相同内容生成一致 ID
- 分布式系统:跨系统命名资源
- URL 映射:将 URL 转换为稳定标识符
- 配置管理:跟踪命名配置项
- 数据去重:识别重复记录
- 联合身份:跨系统一致标识符
常见问题
UUID v5 比 UUID v3 更好吗?
是的,在大多数情况下。UUID v5 使用 SHA-1,其密码学强度高于 UUID v3 中的 MD5。但两者均提供确定性生成。
UUID v5 值会发生冲突吗?
理论上可能,但由于 SHA-1 属性,在实践中几乎不可能。使用不同命名空间或名称字符串可几乎消除冲突风险。
SHA-1 对 UUID v5 来说足够安全吗?
对于 UUID 生成用途,SHA-1 虽有弱点仍足够。UUID v5 不用于安全目的,仅用于一致标识符生成。
我可以为 UUID v5 创建自定义命名空间吗?
可以。虽然 RFC 4122 定义了标准命名空间(DNS、URL、OID、X.500),但你可使用任意有效 UUID(通常为随机 v4)创建自定义命名空间。
相同名称会始终生成相同的 UUID v5 吗?
是,但仅限于同一命名空间。不同命名空间下相同名称生成不同 UUID,这有助于标识符组织。