使用方法
- 选择每个令牌包含多少随机字节。32 字节(256 位)是安全的默认值。
- 选择适合令牌使用场景的编码方式,也可以添加前缀,例如“myapp_live_”。
- 设置所需的令牌数量,然后复制单个令牌或点击“全部复制”。点击“重新生成”即可获取一组新令牌。
工作原理
令牌由 crypto.getRandomValues 生成的随机字节组成。这是内置于浏览器和操作系统中的加密安全随机数生成器。此工具绝不会使用 Math.random。
对于十六进制、Base64 和 Base64URL,工具会按你选择的字节数生成数据并进行编码,因此,32 字节的令牌始终具有 256 位熵:编码后为 64 个十六进制字符、44 个 Base64 字符(包含一个 = 填充字符),或 43 个 Base64URL 字符。Base64URL 会将 + 和 / 替换为 - 和 _,并移除填充字符,因此无需转义即可用于 URL、文件名和 HTTP 标头。
字母数字令牌只使用 A–Z、a–z 和 0–9,避免使用某些系统会特殊处理的字符。每个字符约提供 5.95 位熵,因此工具会生成足够多的字符,以达到至少所选的位数(256 位需要 43 个字符)。工具使用拒绝采样选择字符,确保 62 个字符出现的概率相同。
前缀会作为纯文本添加,不会增加熵。像“sk_live_”这样的前缀能让泄露的密钥更容易被识别,也更容易被密钥扫描器发现。请将密钥存放在密码管理器或密钥存储服务中,不要写入源代码。
示例
Webhook 签名密钥
32 字节的十六进制字符串会生成一个具有 256 位熵、长度为 64 个字符的密钥,可将其粘贴到发送方和接收方的配置中,用于 HMAC-SHA-256 签名。
带有易识别前缀的 API 密钥
选择 24 字节、字母数字和前缀“acme_live_”。每个密钥的格式都是 acme_live_ 后接 33 个字母和数字,至少具有 192 位熵,并且在日志或密钥扫描器中很容易识别。
适用于 URL 的重置令牌
16 字节的 Base64URL 字符串会生成一个长度为 22 个字符的令牌(128 位),可直接用于 /reset?token=… 这样的链接,无需进行百分号编码。
常见问题
密钥应该有多少字节?
对于会话 ID 等令牌,128 位(16 字节)足以让猜测变得不可能。对于签名密钥等长期使用的密钥,通常建议使用 256 位(32 字节),与 SHA-256 的输出长度一致。
应该选择哪种编码?
对于相同的字节数,熵是一样的;不同的只是文本形式。兼容性优先时使用十六进制;需要在 URL 和标头中使用较短令牌时使用 Base64URL;系统不接受标点符号时使用字母数字。
令牌会被存储或记录吗?
不会。令牌会在此浏览器标签页中生成,离开页面后便会消失。它们不会发送到服务器,也不会纳入分析统计。
可以把这些令牌用作密码吗?
可以。它们的随机性足够强,但网站通常要求混合使用多种字符类型。密码生成器可以直接让你设置这些规则。
隐私
令牌使用 crypto.getRandomValues 在浏览器中生成,不会上传、存储、记录或发送到分析服务;系统只会记录一条匿名的工具使用事件。