ГСЧ 随机实验室

实用工具

UUID 与随机令牌

UUID v4、hex、base64 和 PIN——单个或成百上千。

即时 本地计算
结果 随机性:本地 CSPRNG
点击“生成”——数值会出现在这里。
准备就绪
摘要 UUID v4
UUID 格式
36 个字符
122 比特熵

122 比特:128 个随机比特减去 6 个用于版本和变体的比特。

生成的值显示在屏幕上,可能进入浏览器历史或截图。用于正式机密时,请使用服务器端密钥管理器,而不是生成器标签页。

什么是 UUID v4

UUID(universally unique identifier)——128 位标识符,用三十六个字符书写:八组,以连字符分隔,例如 3f2a9c1e-7b4d-4f6a-9e21-8c5d0b7a4e13。标准的第四版意味着其中几乎所有比特都是随机的。

128 个比特中有 6 个被保留:4 个比特用于版本号(第三组中始终是 4),2 个用于 RFC 4122 变体(第四组以 8, 9, a 或 b开头)。剩下 122 个随机比特——约为 5.3 × 10³⁶ 种组合。

UUID 的主要特性是:可以在任何地方生成,而无需与服务器协调。两个独立应用几乎不可能生成相同的标识符,因此适合在写入数据库之前于客户端生成 UUID。

UUID 与令牌的应用场景

  • 当自增不适合或会暴露数据库规模时,用作表的主键;
  • 用于日志和服务间追踪的请求标识符;
  • 用于 API 重复请求的幂等键;
  • 临时文件、文件夹和会话的名称;
  • 用于密码重置链接和邀请的 hex 与 base64 令牌;
  • 用于本地验证的 PIN 码——例如演示环境中。

UUID 与随机字符串有什么区别

随机字符串只是一组字符,没有任何约束。UUID 是标准:固定长度、规范写法、内含版本号和变体,各语言的库都提供现成支持。如果数值需要被标准解析器读取并存入 uuid列,请使用 UUID。

如果需要的正是令牌——用于链接、API 密钥或文件名——格式就更自由。Hex 的优点在于只由数字和拉丁字母 a–f 组成,无需转义。Base64 更紧凑:每字符 6 比特而非 4 比特,因此同等强度的字符串短四分之一。

令牌中有多少熵

令牌的熵按以下公式计算 长度 × log₂(字母表)。PIN 码的字符集是十个数字,因此即使 12 位也只有约 40 比特:这种码能防随机猜测,但防不住有针对性的穷举。

类型计算熵
UUID v4122 个随机比特122 比特
HEX,16 字节16 × 8128 比特
HEX,32 字节32 × 8256 比特
Base64,32 个字符32 × 6192 比特
PIN,6 位数字6 × log₂(10)≈ 20 比特
自定义字符串,32 个字符中取 24 个24 × 5120 比特

如何对待令牌

  • 用于会话和 API 时——不少于 128 比特熵;
  • 用于一次性链接时——短生命周期比长度更重要;
  • 在服务器上保存令牌的哈希,而不是令牌本身;
  • 不要把令牌写入日志和分析系统;
  • PIN 仅用于本地验证,不用于访问数据。
常见问题
UUID v4 会重复吗?
理论上会,就像任何随机值一样。但 122 比特的碰撞概率小到在实际问题中可以忽略:要让碰撞概率达到百分之一,需要生成约 10¹⁸ 个标识符。
为什么第三组始终是“4”?
这是版本号:四表示“随机数据”。第四组以 8、9、a 或 b 开头——这是 RFC 4122 变体的标志。两者共占 6 个比特,不参与随机。
UUID 能代替密码吗?
不能,尽管熵是够的。UUID 用于公开标识:它会出现在链接、日志和界面中,不被视为机密。密码请使用单独的 密码生成器.
hex 令牌比 base64 方便在哪?
Hex 只由 0–9 和 a–f 组成:这类字符串可以安全地放入 URL、文件名和 SQL,无需转义。Base64 更短,但包含“+”和“/”符号,有时需要替换。
可以自定义字符集吗?
可以,在“自定义字符串”模式下。去掉形近字符,让数值更容易口述,并注意字符集大小:它越小,同样长度下熵越低。
↑↓ 导航 Enter 打开 Esc 关闭