什么是 GUID?
GUID(全局唯一标识符)是一个全局唯一标识符,可以通过几种不同的算法生成。本网站上的 GUID 是使用安全随机数生成器生成的。
UUID 格式
UUID 是 128 位的值,通常表示为 32 个十六进制数字,以 5 组显示,用连字符分隔,格式为 8-4-4-4-12,总共 36 个字符(32 个字母数字字符和 4 个连字符)。例如:550e8400-e29b-41d4-a716-446655440000
什么是版本 1 UUID?
版本 1 UUID 是一个通用唯一标识符,它是通过时间戳和生成该标识符的计算机的 MAC 地址生成的。此版本包括:
- 60 位时间戳(自 1582 年 10 月 15 日以来的 100 纳秒间隔数)
- 12 位时钟序列
- 48 位节点标识符(通常是 MAC 地址)
什么是版本 4 UUID?
版本 4 UUID 是一个通用唯一标识符,它是使用随机数生成的。本网站生成的版本 4 UUID 是使用安全随机数生成器生成的。此版本包括:
- 122 位随机位
- 6 位版本位(设置为 0100)
- 2 位变体位(设置为 10)
什么是版本 7 UUID?
版本 7 UUID 是一个通用唯一标识符,它是使用时间戳、计数器和加密强度高的随机数生成的。通常,版本 7 UUID 比版本 1 UUID 具有更好的熵(即随机性)。此版本包括:
- 48 位时间戳(自 Unix 纪元以来的毫秒数)
- 12 位计数器或随机数据
- 62 位加密安全的随机数据
- 4 位版本位(设置为 0111)
- 2 位变体位(设置为 10)
版本 7 UUID 特别适用于数据库主键,因为它们保持时间顺序,同时提供良好的随机性。
什么是 Nil/Empty UUID?
Nil/Empty UUID 是一种特殊形式,包含全部为零的值。其格式为:00000000-0000-0000-0000-000000000000,通常用于表示空或未定义的 UUID。
UUID 版本比较
| 版本 | 生成方法 | 时间有序 | 隐私性 | 使用场景 |
|---|---|---|---|---|
| 版本 1 | 时间戳 + MAC 地址 | 是 | 低 | 分布式系统,唯一性至关重要 |
| 版本 4 | 随机 | 否 | 高 | 通用目的,隐私敏感的应用 |
| 版本 7 | 时间戳 + 随机 | 是 | 高 | 数据库键,可排序的标识符 |
不同 UUID 版本的优势
- 版本 1:保证跨空间和时间的唯一性,但会暴露 MAC 地址
- 版本 4:高随机性和隐私性,但没有排序性
- 版本 7:结合了时间排序和随机性的优势,适用于数据库
常见使用场景
- 数据库主键:UUID 提供唯一标识符,无需集中式密钥生成器
- 分布式系统:确保跨多个系统的一致标识符,无需协调
- URL 和资源标识符:为 Web 资源创建不可猜测的唯一标识符
- 会话标识符:Web 应用程序中的安全会话管理
- 事务 ID:跟踪分布式系统中的操作
安全注意事项
- 版本 1 隐私:可能暴露 MAC 地址,这可能是一个隐私问题
- 版本 4/7 安全:使用加密安全的随机数生成器以防止可预测性
- 可预测性:在某些应用中,可预测的 UUID 可能是一个安全风险