Skip to content

免费 JWT 密钥生成器 — HS256/384/512

为 HS256/384/512 生成强壮、符合 RFC 规范的 JWT 密钥——100% 在浏览器中运行,绝不发往服务器。支持 base64url、base64 或 hex,可复制到 .env。

无追踪 浏览器中运行 免费
你的密钥在本地用 crypto.getRandomValues 生成,绝不上传、记录或存储。它只留在本设备上。
16 64

等效 CLI 命令

已就 RFC 7518 §3.2 密钥长度正确性、base64url / base64 / hex 间的 RFC 4648 编码准确性、CSPRNG 来源(crypto.getRandomValues,绝不用 Math.random)、生成密钥的无网络/无存储隐私性,以及可访问性(带标签的控件、显示/隐藏遮罩、生成与复制时的屏幕阅读器播报)进行审阅。 — Go Tools 安全工具团队 · 2026年6月16日

什么是 JWT 密钥生成器?

JWT 密钥生成器产生的是 HMAC 签名 JSON Web Token 用来证明自己未被篡改的随机签名密钥。当你用 HS256、HS384 或 HS512 签发令牌时,算法会用一个共享密钥对令牌的头部和载荷运行 HMAC;验证方用同样的密钥重新计算同样的 HMAC,只有当签名相符时才接受令牌。该方案的全部安全性都建立在密钥足够长且不可预测之上——而这正是本工具所创建的:一个高熵随机字符串,在你的浏览器中生成,并为你所选的算法正确定长。

值得精确说明本工具做什么、不做什么。它生成的是密钥本身——也就是你放进 JWT_SECRET 环境变量的那个值——而不是一个完整的令牌。如果你想组装头部和载荷并把它们签成一个真正的 JWT,那是 JWT 编码器 的活儿;要拆解一个现有令牌并验证它的签名,请使用 JWT 解码器。可以把密钥想成钥匙,把编码器想成它操作的那把锁:你生成一次钥匙、安全存放它,再用它反复签发和验证众多令牌。

密钥应该多长?答案由规范固定,而非由偏好决定。RFC 7518 §3.2——JSON Web Algorithms 标准——要求 HMAC 密钥至少与哈希输出同等大小:「必须使用与哈希输出同等大小(例如 HS256 为 256 位)或更大的密钥。」这给出生成器自动遵循的一张清晰表格:

| Algorithm | HMAC | Min bytes | Min bits | hex chars | base64 chars | base64url chars | |-----------|------|-----------|----------|-----------|--------------|-----------------| | HS256 | HMAC-SHA-256 | 32 | 256 | 64 | 44 | 43 | | HS384 | HMAC-SHA-384 | 48 | 384 | 96 | 64 | 64 | | HS512 | HMAC-SHA-512 | 64 | 512 | 128 | 88 | 86 |

这些字符数来自上述字节长度的 RFC 4648 编码:hex 把字节数翻倍;base64 带填充地扩展为原来的 4⁄3;base64url 去掉填充,因此 32 字节的密钥是 43 个 base64url 字符而非 44。base64url 是 JWT 的原生编码——URL 安全字母表、无填充——这正是它在这里作为默认输出的原因;base64url 的密钥可以放在头部、URL 或配置值里而无需任何转义。

随机性是你绝不能妥协的部分。本生成器从 crypto.getRandomValues 取得字节,这是浏览器的密码学安全伪随机数生成器,也是支撑 Web Crypto 密钥生成的同一原语。它从不使用 Math.random——后者虽快却可预测,完全不适合用作签名密钥——可预测的 RNG 意味着可猜测的密钥,而可猜测的密钥意味着可伪造的令牌。由于 HMAC 验证在本地用共享密钥进行,捕获到令牌的攻击者可以无限速地离线爆破弱密钥;hashcat(模式 16500)和 jwt_tool 这类工具正是为干这事而存在。反观一个满熵的 32 字节随机密钥,则在计算上遥不可及。教训很直白:绝不要用密码、字典单词或手敲字符串作为 JWT 密钥——生成一个随机的。

最后,在客户端生成密钥本身就是一项安全属性。签名密钥绝不应被传输给第三方,哪怕是帮你创建它的网站。这里的每个字节都在你的浏览器中产生和编码;任何内容都不会上传、记录或存储。当你准备好交付密钥时,「Copy for .env」按钮会递给你一行 JWT_SECRET=…,如果你需要把它折叠进更大的配置,JSON 转 .env 转换器可以帮忙。生成、复制、存进密钥管理器——时机到来时,再用 kid 头和重叠的有效期窗口来轮换它。

// The secret you generate here goes straight into your signing code.
// Node.js with jsonwebtoken — the JWT_SECRET env var holds the key.
import jwt from 'jsonwebtoken';

const secret = process.env.JWT_SECRET; // e.g. base64url value from this tool

// Sign a token with HS256 (HMAC-SHA-256).
const token = jwt.sign({ sub: 'user-42', role: 'member' }, secret, {
  algorithm: 'HS256',
  expiresIn: '15m'
});

// Verify it — pin the algorithm to a whitelist; never trust the token's alg.
const payload = jwt.verify(token, secret, { algorithms: ['HS256'] });

// ---------------------------------------------------------------
// Python with PyJWT — same secret, same algorithm pinning.
// import jwt
// token = jwt.encode({"sub": "user-42"}, key, algorithm="HS256")
// payload = jwt.decode(token, key, algorithms=["HS256"])  # whitelist!

// ---------------------------------------------------------------
// Equivalent-strength CLI generation (32 bytes for HS256):
//   openssl rand -base64 32
//   node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
//   python -c "import secrets; print(secrets.token_urlsafe(32))"

核心功能

算法感知的密钥长度

选择 HS256、HS384 或 HS512,生成器会自动设定 RFC 7518 §3.2 规定的最小密钥大小——32、48 或 64 字节。你可以请求更长的密钥,但永远不会意外预置一个违反规范、或被严格库拒绝签名的过短密钥。

三种文本安全输出格式

并排获得同样随机字节的 base64url(JWT 原生、URL 安全、无填充编码——默认)、标准 base64 或 hex。base64url 是 JWT_SECRET 最安全的默认;当某个特定加载器或库需要其他格式时再切换。三者的熵完全相同。

密码学安全的随机性

每个密钥都取自 crypto.getRandomValues,即浏览器的 CSPRNG,也是 Web Crypto 密钥生成背后的原语。绝不用 Math.random。这保证了一个没有可预测结构的满熵密钥——正是这一属性让密钥超出离线爆破的能力范围。

一键 Copy for .env

「Copy for .env」会把值包装成惯用的 JWT_SECRET=… 赋值,一行、无引号——无需手敲键名即可粘贴进 .env 文件、Docker secret 或 CI 变量。普通的「Copy」则在你只需要值本身时抓取原始密钥。

等效 CLI 命令

面板会为所选算法打印对应的 openssl rand、Node crypto.randomBytes 和 Python secrets 单行命令,让你能在预置脚本或 Dockerfile 中复现等强度密钥。多数同类工具省略了这一点;这里它是内置的。

显示 / 隐藏遮罩

密钥默认被遮罩,因此在演示、教程或屏幕共享时它都不显示在屏幕上。只在你准备好复制时用眼睛图标显示它。无论显示还是隐藏,复制操作始终把真实密钥放到剪贴板上。

100% 私密、仅在浏览器中运行

密钥完全在你的设备上生成、编码和展示。没有网络请求、没有日志、没有存储——可在开发者工具 → 网络中验证。签名密钥绝不应抵达第三方,而在这里它永远不会,这正是在客户端生成它的全部原因。

支持 15 种语言

完整的界面——标签、说明和指引——已本地化为 15 种语言,因此无论你的团队身在何处,工具都能使用、安全建议都清晰可懂。

实战示例

以 base64url(默认)生成 HS256 密钥

Algorithm: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

HS256 使用 HMAC-SHA-256 签名,因此 RFC 7518 §3.2 要求密钥至少 32 字节(256 位)。生成器通过 crypto.getRandomValues 取得 32 个密码学安全的随机字节,并编码为 base64url——也就是 JWT 自身使用的无填充、URL 安全字母表。32 字节会变成 43 个字符的 base64url 字符串。直接把这个值放进 JWT_SECRET 即可。每次点击都会重新生成全新密钥,绝不会两次相同。

生成 HS512 密钥(64 字节 / 512 位)

Algorithm: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)

HS512 使用 HMAC-SHA-512,其哈希输出为 64 字节,因此 RFC 7518 §3.2 要求密钥至少 64 字节(512 位)。工具会识别算法并自动提高字节数——你无需记住这个最小值。64 个随机字节编码为 86 个字符的 base64url 字符串、88 个字符的标准 base64,或 128 个 hex 字符。在这里选用更长的算法,就是一键预置更高熵密钥的方式。

把密钥复制为一行 .env

Click "Copy for .env"
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

「Copy for .env」会把生成的值包装成惯用的 JWT_SECRET=… 赋值形式,让你无需手敲键名即可直接粘贴进 .env 文件、Docker secret 或 CI 变量。该值占一行、无两侧引号——正是 dotenv 风格加载器所期望的格式。需要把变量嵌入更大的配置?可搭配下方链接的 JSON 转 .env 转换器使用。

用命令行复现密钥(等强度)

Show the CLI command
openssl rand -base64 32

CLI 面板会按所选算法打印 openssl、Node 和 Python 命令,它们取得相同数量的安全随机字节——HS256 用 openssl rand -base64 32,HS384 用 …48,HS512 用 …64。输出是等强度的密钥,但并非逐字节相同的字符串:openssl 输出带填充的标准 base64,而本工具默认 base64url,因此字母表和末尾字符不同。选用最适合你预置脚本的那一种即可,熵是一样的。

显示与隐藏密钥

Toggle the eye icon
•••••••••••••••••••••••••••••••••••••••••••  ↔  3sJ9aFq2kP7m…

密钥默认被遮罩,因此在演示或屏幕共享时不会被偷窥,也不会被录屏捕获。准备好复制时点击眼睛图标显示它,之后再次隐藏。无论值是显示还是遮罩,「Copy」和「Copy for .env」都照常工作——落到剪贴板上的始终是真实密钥,绝不是那些圆点。

如何使用 JWT 密钥生成器

  1. 1

    选择签名算法

    选择 HS256、HS384 或 HS512。生成器会立即为该 HMAC 变体应用 RFC 7518 §3.2 规定的最小密钥长度——32、48 或 64 字节——因此你无需查找这个数字,也不会冒密钥过短的风险。

  2. 2

    选择输出格式

    base64url 是默认值——JWT 原生的 URL 安全、无填充编码。若加载器需要,切换到标准 base64;当系统只接受 0–f 字符时则用 hex。三者编码的是同样的随机字节,熵完全相同。

  3. 3

    显示并复制密钥

    密钥默认被遮罩,以在演示或屏幕共享时不显示在屏幕上。点击眼睛图标显示它,然后用「Copy」获取原始值,或用「Copy for .env」复制一行可用于 .env 文件或 CI 变量的 JWT_SECRET=… 。

  4. 4

    按需重新生成

    点击「重新生成」获得一个取自 crypto.getRandomValues 的全新、独立密钥。每个环境生成一个——绝不要在开发、预发布和生产之间重用同一个签名密钥。

  5. 5

    使用 CLI 等效命令或继续签名

    CLI 面板会显示用于脚本化预置的对应 openssl、Node 和 Python 单行命令。拿到密钥后,用 JWT 编码器签发令牌,再用 JWT 解码器确认签名。

常见的 JWT 密钥错误

用密码或短语作为密钥

人为选定的字符串作为签名密钥熵太低,可以通过字典或爆破攻击离线还原,随后任意令牌都能被伪造。请改为生成一个满熵的随机密钥。

✗ 错误
JWT_SECRET=mySuperSecret123  →  low entropy, brute-forceable
✓ 正确
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0  →  32 random bytes

密钥短于算法所要求

RFC 7518 §3.2 要求 HMAC 密钥至少与哈希输出同等长。给 HS256 用 16 字节的密钥低于 32 字节的下限——它削弱签名,有些库会直接拒绝。

✗ 错误
16-byte key with HS256  →  below the 32-byte minimum
✓ 正确
32-byte key with HS256  →  meets RFC 7518 §3.2

用 Math.random 生成密钥

Math.random 不是密码学安全的——它的输出可预测,因此用它构建的密钥是可猜测的,它所签发的令牌也是可伪造的。签名密钥必须来自像 crypto.getRandomValues 这样的 CSPRNG。

✗ 错误
Math.random()-based key  →  predictable, unsafe
✓ 正确
crypto.getRandomValues key  →  full entropy

签名前重新编码密钥

存储并喂入工具产出的确切字符串。在一个服务里把它 Base64 解码成字节、在另一个服务里却当作字面字符串,会让两侧得到不同的密钥,每次签名校验都会失败。

✗ 错误
Service A: raw string · Service B: base64-decoded  →  signatures never match
✓ 正确
Both services use the identical stored string  →  signatures verify

在所有环境间重用同一密钥

一个 JWT_SECRET 被开发、预发布和生产共用,意味着任何一处泄露都能在各处伪造令牌,而轮换也变成要么全换、要么不换。请为每个环境预置一个不同的密钥。

✗ 错误
Same JWT_SECRET in dev, staging, prod  →  one leak breaks all
✓ 正确
A unique secret per environment  →  blast radius contained

验证时信任令牌的 alg

让验证方接受令牌所声明的任意算法,会引发 alg:none 和 HS/RS 混淆伪造。无论密钥多强,都要传入显式的算法白名单。

✗ 错误
jwt.verify(token, secret)  →  accepts the token's alg
✓ 正确
jwt.verify(token, secret, { algorithms: ['HS256'] })  →  pinned

谁在使用本工具

为新服务预置 JWT_SECRET
正在搭建一个签发 HMAC 签名令牌的 API?选择你的库所用的算法,把密钥复制成一行 JWT_SECRET=…,再放进服务的环境。为开发、预发布和生产分别生成不同的密钥——绝不要在多个环境间共用同一个密钥。
轮换已泄露或老化的密钥
当怀疑密钥泄露或它单纯到了该轮换的时候,在这里生成一个新密钥,给它分配一个新的 kid,并用重叠窗口推出它,让现有令牌在过期前仍能通过验证。在确认泄露时,立即轮换并把旧密钥从接受集合中移除。
替换弱密钥或手敲密钥
接手了一个 JWT_SECRET 是短语或抄来的示例值的代码库?那个密钥可被离线爆破。生成一个满熵的 32 字节替代品,在轮换窗口后换上它,在被利用之前堵住令牌伪造漏洞。
在流水线中脚本化生成密钥
需要在 CI 或 Dockerfile 中创建密钥而非手动生成?使用 CLI 面板的 openssl、Node 或 Python 单行命令在你的预置脚本中铸造一个等强度密钥,并用本页面理解每条命令产生的字节长度和编码。
安全地讲解 JWT 签名
带一个团队走一遍 HS256 的原理,而绝不暴露真实的生产密钥——在屏幕上生成一个一次性密钥(显示前一直遮罩),用 JWT 编码器签发一个示例令牌,再用 JWT 解码器验证它,让整个签名-验证流程一目了然。
比较 HS256、HS384 和 HS512 的密钥大小
在拿不准该把哪个 HMAC 变体定为标准时?在各算法间切换,看看所需密钥长度和编码后字符串如何增长——43、64 和 86 个 base64url 字符——并在写进配置前挑选适合你系统的强度与令牌大小折中。
为本地开发生成密钥
需要一个快速、有效的密钥来跑起本地认证流程?一键生成、复制到 .env,你就不再被卡住了——而且用的是真正的 CSPRNG 密钥,而不是一个你会忘记在部署前替换掉的占位符。

生成器的工作原理

crypto.getRandomValues(CSPRNG)
密钥通过用 crypto.getRandomValues 填充一个 Uint8Array 生成,它是 Web Crypto 的密码学安全伪随机数生成器,与支撑 Web Crypto 密钥生成的熵源相同。任何地方都绝不使用 Math.random——它在统计上可预测,不适合任何密码学密钥。
RFC 7518 §3.2 密钥定长
每个算法的字节数遵循 JSON Web Algorithms 的要求,即 HMAC 密钥至少与哈希输出同等大小:HS256(SHA-256)32 字节,HS384(SHA-384)48 字节,HS512(SHA-512)64 字节。选择算法即设定最小值;生成器不会输出低于规范下限的密钥。
RFC 4648 编码(base64url / base64 / hex)
原始字节用 RFC 4648 字母表编码。base64url 使用无填充的 URL 安全字母表(32 字节 → 43 字符),标准 base64 使用 +、/ 和 = 填充(→ 44 字符),hex 每字节写两个字符(→ 64 字符)。切换格式会重新编码同样的字节——底层熵保持不变。
为何 base64url 是默认
JWT 各组成部分本身就是 base64url 编码的,而 URL 安全、无填充的字母表意味着 base64url 的密钥在头部、URL 或配置文件中从不需要转义。标准 base64 的 + 和 / 以及末尾的 = 在这些上下文中可能出错,因此 base64url 是 JWT_SECRET 稳妥的默认选择。
Copy-for-.env 格式
「Copy for .env」会输出单行、无两侧引号的 JWT_SECRET=——正是 dotenv 风格加载器无需改动即可解析的形态。原始密钥绝不会包含在 .env 文件中需要加引号的字符,因此该行可原样粘贴。
等强度 CLI 命令,并非逐字节相同
CLI 面板的 openssl rand -base64 N、Node randomBytes(N).toString('base64url') 和 Python secrets.token_urlsafe(N) 命令都会为所选算法取得 N 个安全随机字节。它们产生等强度的密钥,而非相同的字符串——openssl 输出带填充的标准 base64,因此其字母表和末尾字符与本工具默认的 base64url 不同。

JWT 密钥最佳实践

让密钥长度匹配算法
按 RFC 7518 §3.2 的要求,HS256 至少用 32 字节、HS384 用 48、HS512 用 64。本生成器会替你处理,但如果你手动定长,绝不要低于哈希输出长度——过短的 HMAC 密钥既削弱签名,也可能被严格的库拒绝。
始终用 CSPRNG 生成,绝不用密码
JWT 密钥是无人需要记忆的机器凭证,所以把熵用满:使用密码学安全的随机密钥,而非口令、字典单词或手敲字符串。人为选定的密钥是 JWT 破解工具所自动化的离线爆破攻击最容易得手的目标。
每个环境用唯一密钥
开发、预发布和生产应各有自己的 JWT_SECRET。共用一个密钥意味着低风险环境中的泄露能在各处伪造令牌,也让轮换变成要么全换、要么不换。请在这里为每个环境生成单独的密钥,并把每个存进各自的密钥管理器作用域。
验证时锁定算法
在验证一侧,始终传入显式的算法白名单——jsonwebtoken 中是 algorithms: ['HS256'],PyJWT 中是 algorithms=["HS256"]——并绝不信任令牌内部的 alg 字段。接受令牌自我声明的算法会引发经典的算法混淆和 alg:none 伪造攻击,无论你的密钥多强。
用 kid 头和重叠密钥轮换
给已签发的令牌打上密钥标识符(kid),并通过 JWKS 端点发布活跃密钥,这样你就能无停机地轮换:用新密钥签发新令牌,同时仍接受旧密钥直到它的令牌过期。在怀疑泄露时,跳过重叠,立即吊销旧密钥。

常见问题

我生成的 JWT 密钥会被发送到你们的服务器吗?
不会。密钥完全在你的浏览器中用 crypto.getRandomValues 生成,这是平台提供的密码学安全随机数生成器。字节在你的设备上产生、在本地编码、只展示给你。任何内容都不会上传、不会记录、不会写入磁盘,也不会发往任何第三方——打开开发者工具 → 网络,你会看到点击「重新生成」或「复制」时发出的请求为零。这意味着你在这里生成的密钥从它出现的那一刻起就只属于你;没有任何服务器观察到它。这正是在客户端生成签名密钥的全部意义所在,而不是在一个原则上可以保留它所分发的每个密钥副本的网站上生成。
如何生成一个安全的 JWT 密钥?
三步。第一,选择你的应用所使用的签名算法——HS256、HS384 或 HS512——生成器会立即把密钥大小调整为该变体在 RFC 7518 §3.2 下的最小值(32、48 或 64 字节),因此你永远不必手选数字,也不会冒着密钥过短的风险。第二,把编码保持在 base64url(JWT 原生、URL 安全的格式),或在配置加载器需要时切换到 base64 或 hex。第三,点击「Copy」——或点击「Copy for .env」获得可直接粘贴的 JWT_SECRET=… 一行——再把该值存入密钥管理器或环境变量,绝不放进源码版本控制。由于每个字节都来自 crypto.getRandomValues,一个 32 字节的密钥就已经承载 256 位熵,远超那些破解人为选定密钥的离线爆破攻击的能力。偏好命令行?工具还会打印等效的 openssl、Node 和 Python 单行命令,可直接粘贴到终端。
HS256 的 JWT 密钥应该多长?
至少 32 字节(256 位)。RFC 7518 §3.2——也就是 JSON Web Algorithms 规范——规定,对于 HMAC 签名,「必须使用与哈希输出同等大小(例如 HS256 为 256 位)或更大的密钥」。HS256 使用 HMAC-SHA-256(256 位哈希),因此最小密钥为 32 字节;HS384 使用 HMAC-SHA-384,需至少 48 字节(384 位);HS512 使用 HMAC-SHA-512,需至少 64 字节(512 位)。当你选择算法时,本生成器会自动选定正确的最小值,你也可以请求更长的密钥。过短的密钥不仅更弱——它违反规范,有些库会直接拒绝用它签名。
base64url、base64 和 hex 有什么区别,我该选哪个?
三者编码的是同样的随机字节;它们只在字符字母表上不同,熵并无差异。base64url 是 JWT 的原生编码——它使用 URL 安全字母表(用 - 和 _ 代替 + 和 /)并省略填充,因此在令牌、URL 或请求头中从不需要转义。这正是它在这里作为默认值的原因。标准 base64 使用 +、/ 和 = 填充;当配置加载器或库明确要求经典 base64 时再选它。hex(base16)把每个字节写成两个 0–f 字符,产生更长但无歧义的字符串,在系统拒绝非字母数字字符时很方便。对于 JWT_SECRET 环境变量,base64url 是最安全的默认;只要你存储确切的字符串并原样喂给签名库,三者中任意一个都可以。
弱 JWT 密钥会被破解吗?
会——而且这是 HMAC 签名 JWT 的最大风险。由于 HS256/384/512 使用同一个共享密钥,任何持有令牌的人都能对签名发起离线爆破或字典攻击,无需限速、无需联系服务器。像 hashcat(模式 16500 针对 JWT)和 jwt_tool 这样的工具正是为此而生;在普通 GPU 上,低熵密钥通常会在数秒到数小时内被攻破,而一个字典单词或泄露的密码几乎会瞬间被攻破。来自本生成器的满熵 32 字节随机密钥则远超爆破的能力范围。一旦攻击者还原出密钥,他们就能伪造任意令牌——包括一个声称拥有管理员权限的令牌——所以密钥强度并非可选项。请用 CSPRNG 生成签名密钥,绝不要用人为选定的字符串。如需更深入了解弱密钥、算法混淆和令牌重放攻击,请参阅我们的 JWT 安全最佳实践 指南。
我可以用密码作为 JWT 密钥吗?
可以,但你不应该这么做。人易记的密码——即便是很长的口令——所携带的熵也远少于 32 个随机字节,这使它成为上文所述离线爆破和字典攻击的现实目标。JWT 密钥是机器对机器的凭证;没人需要记住它们,因此没有理由为可记性牺牲熵。请在这里生成一个随机密钥,存入密钥管理器或环境变量,让你的应用读取它。如果你出于其他目的需要可记忆的凭证,那是 随机密码生成器 的活儿;若要存储用户密码,则用 bcrypt 生成器 做单向哈希——而不是用于令牌签名密钥。
如何在不破坏现有有效令牌的前提下轮换 JWT 密钥?
用重叠方式轮换,而非硬切换。给你签发的令牌加上一个密钥标识符(kid 头),让验证方知道该比对哪个密钥,并发布你的活跃密钥——通常通过你的服务读取的 JWKS 端点。轮换步骤:在这里生成一个新密钥,开始用新的 kid 签发新令牌,同时仍接受旧密钥进行验证,直到用旧密钥签发的每个令牌都过期后才停用它。这个重叠窗口意味着不会有任何有效会话在中途被作废。若怀疑发生泄露,则跳过优雅重叠:立即轮换,把旧密钥从接受集合中移除,并强制重新认证,让泄露的令牌立刻无法通过验证。
HMAC(HS*)密钥与 RSA 或 ECDSA(RS*/ES*)密钥有何不同?
它们用相反的密钥模型解决同一个问题。HS256/384/512 是 HMAC 算法:它们使用一个对称密钥——也就是本工具生成的那种——既用于签名又用于验证,因此任何能验证令牌的一方也都能伪造令牌。这简单、快速,非常适合由单一服务既签发又校验自己令牌的场景。RS*(RSA)和 ES*(ECDSA)是非对称的:它们使用密钥对,私钥负责签名,独立的公钥只负责验证。你可以把公钥交给任何需要校验令牌的人,而绝不暴露签名密钥——当一个身份提供方签发的令牌需要由许多独立服务验证时,这才是正确选择。本生成器仅产生 HMAC 对称密钥。要用你生成的密钥组装并签出一个真正的令牌,请使用 JWT 编码器;要拆解并验证一个令牌,请使用 JWT 解码器

Bcrypt 哈希生成器与验证器

安全工具

在线生成并验证 bcrypt 密码哈希——可调成本因子,支持 $2b$/$2a$/$2y$ 前缀。100% 在浏览器中运行,密码绝不上传。

JWT 解码器 · 在线解码工具

安全工具

免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。

JWT 编码器与生成器

安全工具

免费在线 JWT 生成器与编码器。构建头部和载荷,使用 HS256、RS256 或 ES256 即时签名。100% 浏览器本地运行——你的密钥和私钥绝不离开设备。

在线 MD5 哈希生成器与文件校验工具

安全工具

在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。

随机密码生成器 — 自定义长度、强度与安全性

安全工具

免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。

SHA-1 哈希生成器(160 位遗留算法)

安全工具

在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。