Loading

「学习笔记」UUID 相关知识

UUID 相关知识

很小的知识点, 但碰到相关题目了, 因此记录一下.

介绍

UUID 是通用唯一识别码的缩写, 是国际标准化组织 (ISO) 提出的一个概念, UUID 是一个 \(128\) 比特的数值, 这个数值可以通过一定的算法计算出来. 为了提高效率, 常用的 UUID 可缩短至 \(16\) 位. UUID 用来识别属性类型, 在所有空间和时间上被视为唯一的标识. 一般来说, 可以保证这个值是真正唯一的任何地方产生的任意一个 UUID 都不会有相同的值.

编码规则

UUID 的编码规则:

  1. \(1 \sim 8\) 位采用系统时间, 在系统时间上精确到毫秒级保证时间上的唯一性
  2. \(9 \sim 16\) 位采用底层的 IP 地址, 在服务器集群中的唯一性
  3. \(17 \sim 24\) 位采用当前对象的 HashCode 值, 在一个内部对象上的唯一性
  4. \(25 \sim 32\) 位采用调用方法的一个随机数, 在一个对象内的毫秒级的唯一性

通过以上4种策略可以保证唯一性。在系统中需要用到随机数的地方都可以考虑采用UUID算法.

格式

UUID 的格式是相对固定的, 可以从这里进行出题, 若 flag 采取 uuid 生成, 则相当于泄露了其中的 \(5\) 位.
UUID 的标准结构 (RFC 4122): xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx.
其中 x 是十六进制数字, 即 \(0 \sim 9, a \sim f\), M 位置是版本号 version, 即 uuid1() 的 M 是 \(1\), uuid4() 的 M 是 \(4\), N 代表变体, 用于兼容旧的 UUID 格式, 现在绝大多数都是 8, 9, a, b.

五个主要版本

版本 名称 生成依据 特点与适用场景
v1 时间 + MAC 地址 时间戳 + 节点硬件标识 (MAC) 唯一性极高, 但会暴露 MAC 和生成时间, 有安全风险. 适合内网可信环境.
v2 DCE 安全 基于 v1 加入 POSIX UID/GID 极少使用, 用于古老的 DCE (分布式计算环境) 系统.
v3 基于名字的 MD5 命名空间 (如域名) + 名称进行 MD5 哈希 相同输入产生相同 UUID, 适合将已有数据 (如邮箱) 映射为固定 ID.
v4 随机数 (最常用) 伪/真随机数生成器 简单, 安全, 不暴露信息; 缺点是完全随机, 插入数据库时易导致索引页分裂, 影响写入性能.
v5 基于名字的 SHA-1 同 v3, 哈希算法升级为 SHA-1 比 v3 更安全, 适合确定性映射场景.

新标准补充:v6 和 v7(RFC 9562,2024 年正式发布)
v6: 对 v1 重新排序, 使其更利于数据库排序 (但依然依赖 MAC 地址).
v7: 时间戳 (毫秒级精度) + 随机数. 兼具 v4 的安全性和时间有序性, 极大提升数据库索引性能, 是未来分布式 ID 的主流选择.

posted @ 2026-09-09 22:02  yi_fan0305  阅读(26)  评论(0)    收藏  举报