什么是随机令牌生成器?

使用Web Crypto API生成十六进制、Base64、字母数字、URL安全、纯数字、含符号或完全自定义字符集的随机令牌。可用于API密钥、会话令牌、CSRF令牌、数字PIN码和一次性验证码,以及密码重置链接等需要密码学安全随机性的场景。

所有字节来自 crypto.getRandomValues,即浏览器生成 TLS 密钥所用的同一源头。可选 16、32、48、64 或 128 字节原始长度,熵值面板会实时显示在当前格式下相当于多少比特的随机性。一次最多生成 20 条令牌,可批量下载为 .txt 文件。

使用方法

  1. 选择令牌格式——十六进制、Base64、字母数字、URL安全、纯数字、含符号或你自己的自定义字符——并设定所需长度。
  2. 点击生成按钮,即刻创建密码学安全的随机令牌。
  3. 复制令牌,或一次批量生成多个令牌。

何时使用

  • 签发 API key、webhook 签名密钥或服务间认证 token。
  • 生成密码重置链接、邮箱确认 token 或一次性登录 URL。
  • 为测试数据填充随机 ID,避免相互冲撞。

结果

生成一个256位十六进制令牌(64个字符)用作API密钥:「a3f8b2c1d4e5f6...」,基于crypto.getRandomValues提供完整熵值。

常见问题

API 密钥到底需要多少比特熵才安全?
长期使用的 token 实际下限是 128 比特,远远超出可暴力破解的范围。用于签名或参与密码学运算时建议 32 字节(256 比特)。短期会话 token 16 字节就够。
base64 和 URL-Safe 格式有什么区别?
base64 使用 + / 和 = 作填充,放进 URL 或文件名会出问题。URL-Safe 把这两个换成了 - 和 _,并去掉填充。凡是出现在查询串、路径或 HTTP 头里的 token 都建议用 URL-Safe。
字节数相同时,为什么字母数字的熵比 hex 低?
hex 和 base64 把每字节的完整 8 比特直接映射到字符上。字母数字通过取模映射到 62 个字符,每字节会损失约 2 比特,还会引入轻微偏差。用作 ID 没问题,但不适合做密钥。
如果当前环境没有 Web Crypto,可以退而求其次用 Math.random() 吗?
不可以。Math.random() 是可预测的伪随机数,攻击者只要观察到几个输出,就能推出后续。Web Crypto 在 2014 年之后的浏览器和所有现代 Node.js 都支持。若环境缺失,就别生成这个密钥。
我的系统里同一个 token 会不会重复出现?
16 字节的 token 大约要签发 2^64 条才有可能撞上(生日攻击边界)。在十亿级以下的常规场景里,碰撞几率几乎为零,完全不需要做去重检查。

相关工具