什么是 UUID v3?
UUID 版本 3 是基于命名空间的 128 位标识符(36 字符串)来自 RFC 4122,使用 MD5 哈希。它由以下部分组成:
- 命名空间 UUID: 预定义或自定义的 UUID 命名空间
- 名称: 用户提供的字符串,进行哈希处理
- MD5 哈希: 应用于命名空间 + 名称组合
格式示例: 9125a8dc-52ee-365b-a5aa-81b0b3681cf6
UUID v3 的工作原理
- 选择一个命名空间 UUID(预定义或自定义)
- 将命名空间 UUID 字节与名称字符串字节连接
- 计算连接值的 MD5 哈希
- 将版本位设置为 0011(版本 3)
- 将变体位设置为 10(RFC 4122 标准)
- 组装为 32 个十六进制数字,带有连字符:8-4-4-4-12 格式
优点与考虑事项
优点 | 考虑事项 |
---|---|
|
|
UUID v3 结构
位 | 内容 |
---|---|
0-47 | MD5 哈希的前 48 位 |
48-51 | 版本(0011 为 v3) |
52-63 | MD5 哈希的下 12 位 |
64-65 | 变体(10 为 RFC4122) |
66-127 | MD5 哈希的剩余 62 位 |
预定义命名空间
名称 | UUID | 目的 |
---|---|---|
DNS | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | 域名 |
URL | 6ba7b811-9dad-11d1-80b4-00c04fd430c8 | URLs |
OID | 6ba7b812-9dad-11d1-80b4-00c04fd430c8 | ISO OIDs |
X.500 DN | 6ba7b814-9dad-11d1-80b4-00c04fd430c8 | X.500 Distinguished Names |
UUID v3 与其他版本的比较
版本 | 基于 | 用例 | 隐私 |
---|---|---|---|
UUID v1 | 时间 + MAC | 时间排序的 ID | ⚠️ 揭示 MAC |
UUID v3 | 命名空间 + MD5 | 确定性 ID | ✅ 私有 |
UUID v4 | 随机 | 安全随机 ID | ✅ 私有 |
UUID v5 | 命名空间 + SHA-1 | 确定性 ID | ✅ 私有 |
UUID v6 | 时间(重新排序) | 可排序 ID | ⚠️ 揭示 MAC |
UUID v7 | 时间 + 随机 | 可排序 ID | ✅ 私有 |
常见用例
- 基于 URL 的标识符: 从 URLs 创建 UUIDs
- 特定域的 ID: 将 DNS 名称转换为 UUIDs
- 确定性文件 ID: 内容寻址
- 用户 ID: 从电子邮件或用户名
- 配置条目: 用于一致的键
- 文档引用: 内容管理系统
常见问题
UUID v3 在加密上安全吗?
不太安全。UUID v3 使用 MD5,已知存在加密弱点。对于更高的安全性,请考虑 UUID v5(SHA-1)或 UUID v4(随机)。
相同的输入是否总是会产生相同的 UUID v3?
是的。UUID v3 是确定性的 - 相同的命名空间和名称将始终产生相同的 UUID,这使其适用于可重复的 ID。
UUID v3 和 v5 之间有什么区别?
它们的工作方式相同,只是 v3 使用 MD5,而 v5 使用 SHA-1。UUID v5 通常更受欢迎,因为 SHA-1 在加密上比 MD5 更强。
我可以创建自己的命名空间吗?
可以。虽然 RFC 4122 定义了标准命名空间(DNS、URL、OID、X.500),但您可以使用任何有效的 UUID 创建自定义命名空间。
UUID v3 适合用于安全令牌吗?
不。由于 MD5 的弱点和确定性,UUID v3 不推荐用于安全令牌或任何需要不可预测性的东西。