生成确定性的 UUID v5
第 5 版 UUID 由命名空间 UUID 和名称通过 SHA-1 推导而来。任何人对相同的命名空间和相同的名称进行哈希,都会得到完全相同的 UUID,因此 ID 可以重新计算,无需存储。
计算示例
- 命名空间(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名称
- example.com
- 结果
- cfbff0d1-9375-5685-968c-48ce8b15ae17
- 命名空间(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名称
- Example.com
- 结果
- a1feb884-07f5-5a14-8edb-cb659a7fbadc
工作原理
- 将命名空间的 16 个字节与名称的 UTF-8 字节拼接后进行 SHA-1 哈希。摘要的前 16 个字节在设置版本位(5)和变体位后即成为 UUID。
- RFC 9562 预定义了 DNS 名称、URL、ISO OID 和 X.500 可分辨名称的命名空间。你也可以把任意自定义 UUID 用作私有命名空间。
- 名称按字节逐一比较:大小写、空格和末尾斜杠都会改变结果,因此请先规范化名称。由于输出可以预测,切勿把 UUID v5 用作密钥。
一次生成1-100个UUID
DNS命名空间:6ba7b810-9dad-11d1-80b4-00c04fd430c8(默认)
要哈希的名称(例如域名、电子邮件等)
关于UUID
UUID v1: 基于时间的UUID,包含时间戳和生成UUID的计算机的MAC地址。当您需要知道UUID何时创建时很有用。
UUID v4: 随机生成的UUID。这是最常用的版本,在最小信息泄露的情况下提供良好的唯一性。
UUID v5: 使用SHA-1哈希的基于名称的UUID。给定相同的命名空间和名称,您将始终获得相同的UUID。对于确定性UUID生成很有用。