跳到工具

随机令牌生成器

用浏览器密码学随机源生成安全的 API 密钥与 Bearer 令牌,支持十六进制、Base64、Base64URL、字母数字四种格式。

格式

令牌是一段高熵随机字符串,用于鉴权请求或标识会话。与密码不同,人不需要手动输入它:它一次性签发、由客户端保存、在每次调用时出示。因此它的强度完全取决于包含多少随机位,而不是是否好记。

本工具的每个字节都来自 crypto.getRandomValues,即浏览器对接操作系统密码学安全随机数生成器的接口。输出不会被传输、记录或保存到任何服务器,因此在这里生成的令牌与在本机生成的一样私密。

格式只是传输层面的选择,与安全性无关:32 个随机字节无论编码为 64 个十六进制字符、44 个 Base64 字符还是 43 个 URL 安全字符,都携带 256 位熵。按你的 API 要求选择格式即可,相同字节数下四种格式都同样不可猜测。

常见用途

常见问题

令牌应该用多少字节?
大多数场景至少 16 字节(128 位);长期有效的 API 密钥用 32 字节(256 位)是稳妥默认。更多字节不会损害安全,但字符串更长,可结合存储与请求头限制权衡。
该选哪种格式?
令牌放进 URL 或 Authorization 头且不想额外编码时用 Base64URL;需要大小写不敏感、对 shell 友好的值用十六进制;系统不允许标点符号时用字母数字。相同字节数下熵完全相同。
在浏览器里生成令牌安全吗?
安全,前提是像本工具这样使用 Web Crypto API。crypto.getRandomValues 由操作系统 CSPRNG 支撑,与服务端语言所用的是同一随机源。令牌不会离开你的标签页,因此没有网络暴露。
可以把令牌当密码用吗?
不建议直接这么做。随机令牌虽强但无法记忆,而多数登录系统的密码哈希与限流是为人工选择的凭证设计的。需要手动输入的凭证用密码生成器,机器间的密钥用本工具。
为什么不能用 Math.random?
Math.random 不是密码学安全的:观察到足够多输出后可以预测后续值,由此生成的令牌可被猜测。涉及密钥时必须用 crypto.getRandomValues,即使是用完即弃的脚本也不例外。

相关工具