Pack Camo

JWT 密钥生成器

随机的 HS256、HS384 和 HS512 密钥,支持 hex 或 Base64,可直接用于 .env。 所有处理都在本地完成,不会上传任何内容。

输入
HS256 · HS384 · HS512
输出
Hex · Base64 · Base64URL · .env

HS256 至少需要 32 字节。

你的密钥

256 位密钥 · HS256 · 字符数:0

.env 行

JWT_SECRET=
在 JWT 解码器中测试

在你的设备上使用 crypto.getRandomValues 生成,不会发送或存储任何内容。

值得用来签名的密钥

使用 HMAC 签名的 JWT,安全性取决于它的密钥。谁猜出了密钥,谁就能签发你的服务器信任的令牌,而过短或人为设定的密钥恰恰是离线破解工具最先尝试的对象。本生成器使用浏览器的密码学随机数生成器,按算法要求的长度生成密钥。

密钥应该多长

  • HS256 至少需要 32 字节(256 位)。更短的密钥比与之搭配的哈希更弱,许多库会直接拒绝。
  • HS384 至少需要 48 字节(384 位)。
  • HS512 至少需要 64 字节(512 位)。
  • 更长也可以。比哈希分组长度更长的密钥会先被哈希压缩,因此 HS256 超过 64 字节、HS512 超过 128 字节后不会再有额外收益。

如何使用密钥

  • 不要写进代码。把它放进环境变量或密钥管理服务;“复制为 .env”会给你一行可直接粘贴的内容。
  • 注意编码。有些库把密钥当作文本,有些则期望 Base64 形式的原始字节。如果你会把它解码为字节,请在这里选择 Base64 或 Base64URL;如果库直接使用该字符串,hex 是最稳妥的选择。
  • 更换密钥会让所有人退出登录。用旧密钥签名的令牌都将无法通过验证,所以请有计划地轮换,不要仓促操作。
  • 部署前先测试。“在 JWT 解码器中测试”会打开解码器,并载入一个用该密钥签名的示例令牌,让你看到有效签名是什么样子。

常见问题

如何生成 JWT 密钥?
选择服务器使用的算法,就会立即生成长度合适的密钥。选择库所需的编码,然后复制密钥或现成的 .env 行。点击“重新生成”即可得到新的密钥。
HS256 的 JWT 密钥应该多长?
至少 32 字节,即 256 位:64 个 hex 字符或 43 个 Base64URL 字符。更短的密钥比与之搭配的 SHA-256 哈希更弱。
在浏览器中生成密钥安全吗?
安全。密钥来自 crypto.getRandomValues,也就是浏览器用于 TLS 的同一个密码学随机数生成器,并在你的设备上创建。它不会被发送到服务器,也不会被记录或存储。
JWT 密钥应该用 hex 还是 Base64?
两者包含的随机字节完全相同。如果库把密钥当作纯文本,hex 最稳妥;如果库会先把密钥解码为原始字节(许多配置项都是这样要求的),则应选 Base64 或 Base64URL。
可以用密码作为 JWT 密钥吗?
不建议。与 32 个随机字节相比,密码又短又容易被预测,而任何拿到你某个令牌的人都可以离线猜测密钥,速度只取决于其硬件。