JWE 解码工具
粘贴 JWE 立即解析 Protected Header 与 五段式结构(protected / encrypted_key / iv / ciphertext / tag),
自动 base64url 解码并 JSON 美化。支持 Compact 与 Flattened JSON 两种序列化格式,
基于 Web Crypto API 本地解密 dir、A128KW/A192KW/A256KW、
RSA-OAEP-256/384/512、RSA1_5、PBES2-HS256+A128KW、
ECDH-ES、ECDH-ES+A128KW 等 16 种密钥管理算法,
配套 A128GCM/A192GCM/A256GCM 内容加密算法。PBES2 系列支持密码派生解密(PBKDF2 + AES-KW),
ECDH-ES 系列支持椭圆曲线协商解密(ECDH + Concat KDF),
明文若为 JSON 自动美化,若为 JWT 提示继续解码。所有密钥不离开浏览器,零上传、零追踪。
JWE 输入
解析结果
direnc: A128GCM密钥管理算法(alg):直接密钥(共享对称密钥直接作为 CEK,encrypted_key 为空)
内容加密算法(enc):AES-128 GCM(推荐,AEAD 认证加密)
解密支持:可解密
Protected Header(解码后)
{
"alg": "dir",
"enc": "A128GCM"
}五段拆分
| 段名 | 说明 | 长度 | 字节数 | 值(前 40 字符) | 操作 |
|---|---|---|---|---|---|
| Protected Header | base64url 编码的 JOSE 头部 | 39 字符 | 29 B | {"alg":"dir","enc":"A128GCM"} | |
| Encrypted Key | 加密的 CEK(dir 算法时为空) | 0 字符 | 0 B | | |
| IV | 初始化向量(96 位) | 16 字符 | 12 B | 48V1_ALb6US04U3b | |
| Ciphertext | 密文 | 58 字符 | 43 B | 5Jm_i0aK3aPLdQEbjJkyMw2Ou0HTkP4NZH5RjVQS... | |
| Authentication Tag | 认证标签(128 位) | 10 字符 | 7 B | -UM1RT8KBI |
解密
请输入 base64url 编码的对应对称密钥(长度需匹配 enc 算法,如 A128GCM 为 16 字节)
常见问题
JWE 是什么?与 JWT、JWS 有什么关系?
JWE(JSON Web Encryption)是 RFC 7516 定义的加密令牌标准,
用于在两方之间安全传递加密后的声明。它由 五段组成:
Protected Header(头部)、Encrypted Key(加密的 CEK)、
IV(初始化向量)、Ciphertext(密文)、Authentication Tag(认证标签),
用 . 分隔。
JWS(JSON Web Signature,RFC 7515)是签名令牌,三段式 Header.Payload.Signature,
payload 仅 base64url 编码,任何人可解码查看内容,但不可篡改(签名防伪)。
JWT(JSON Web Token,RFC 7519)是 JWS 或 JWE 的统称,通常指 JWS。
当 JWT 用 JWE 格式时,payload 被加密,需密钥才能查看内容。简言之:JWS 防篡改,JWE 防查看。
JWE 的五段格式分别是什么含义?
JWE Compact 序列化由五段用 . 分隔组成:
- Protected Header(base64url 编码的 JOSE 头部):声明 alg(密钥管理算法)、
enc(内容加密算法)、kid(密钥 ID)、typ(类型)、zip(压缩)等。
- Encrypted Key(加密的内容加密密钥 CEK):用 alg 算法加密后的 CEK。
dir 算法时此段为空(CEK 即共享密钥本身)。
- IV(初始化向量):AES-GCM 通常为 96 位(12 字节)随机数,每次加密不同。
- Ciphertext(密文):用 enc 算法加密后的明文,base64url 编码。
- Authentication Tag(认证标签):AEAD 算法(如 GCM)生成的认证标签,固定 128 位(16 字节),
用于校验密文与 AAD 完整性。
AAD(Additional Authenticated Data)= ASCII 编码的 Protected Header,参与认证但不被加密。
JWE 与 JWS 的区别?什么时候应该用 JWE?
JWS:签名令牌,三段式。payload 仅 base64url 编码,任何人可读,但签名防止篡改。
适用于:身份认证 token(JWT)、OAuth state、SAML 断言等需要公开内容但防篡改的场景。
JWE:加密令牌,五段式。payload 被加密,无密钥不可读,同时认证标签防篡改。
适用于:需要保密 payload的场景,如:
- 含敏感信息的声明(用户手机号、身份证号、API 凭证)
- 内部服务间传递的机密数据
- 需向前保密(forward secrecy)的会话 token
- HIPAA / GDPR 等合规场景下的医疗、金融数据传输
注意:JWE 仅加密 payload,不提供身份认证,需配合 JWS 签名才能验证签发者身份(即 JWS+JWE 嵌套令牌)。
JWE 支持哪些密钥管理算法(alg)?
RFC 7518 定义了 JWE 的密钥管理算法,主要分五类:
- 直接模式:dir,共享对称密钥直接作为 CEK,Encrypted Key 段为空,最简单。
- 对称密钥包装:A128KW / A192KW / A256KW,
用 AES 算法包装(wrap)CEK,接收方用相同 KEK 解包。
- 非对称加密:RSA-OAEP-256 / RSA-OAEP-384 /
RSA-OAEP-512(推荐)/ RSA1_5(已不推荐,存在 Bleichenbacher 攻击风险),
发送方用接收方公钥加密 CEK,接收方用私钥解密。
- 密码派生:PBES2-HS256+A128KW 等,用用户密码派生 KEK 再包装 CEK,
适合用户记忆密码场景。
- 椭圆曲线协商:ECDH-ES / ECDH-ES+A128KW /
ECDH-ES+A192KW / ECDH-ES+A256KW,
基于椭圆曲线 Diffie-Hellman 密钥协商 + Concat KDF 派生密钥,提供前向保密能力。
本工具支持解密 dir、A128KW/A192KW/A256KW、
RSA-OAEP/RSA-OAEP-256/384/512、RSA1_5、
PBES2-HS256+A128KW、PBES2-HS384+A192KW、PBES2-HS512+A256KW、
ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW、ECDH-ES+A256KW
共 16 种算法。
JWE 支持哪些内容加密算法(enc)?
RFC 7518 定义了 JWE 的内容加密算法,均为 AEAD(Authenticated Encryption with Associated Data)
算法,同时提供加密与认证:
- AES-GCM 系列:A128GCM / A192GCM / A256GCM,
基于 AES 与 GCM 模式,性能高(硬件加速),认证标签 128 位。推荐,现代 JWE 首选。
- AES-CBC+HMAC 系列:A128CBC-HS256 / A192CBC-HS384 /
A256CBC-HS512,AES-CBC 加密 + HMAC-SHA 认证,密钥长度是加密长度的两倍(如 A128CBC-HS256 用 256 位密钥,
前 128 位 HMAC,后 128 位 AES)。
本工具当前仅支持 GCM 系列解密(Web Crypto API 原生支持),CBC+HMAC 系列需手动实现 HMAC 验证与 CBC 解密,
后续版本可能补充。
避免使用:算法设计中应避免 none(无加密)与未识别的 enc 值。
dir 算法与 RSA-OAEP 算法有什么区别?
dir(直接密钥):发送方与接收方预先共享对称密钥,
该密钥直接作为 CEK 加密 payload,Encrypted Key 段为空。
- 优点:实现最简单,性能高,无密钥包装开销。
- 缺点:需安全渠道预先交换密钥;多方场景需维护多份密钥;无法实现向前保密。
- 适用:内部服务间通信、单一签发方与接收方、调试场景。
RSA-OAEP(非对称加密):发送方用接收方公钥加密 CEK,
接收方用私钥解密 CEK,再用 CEK 解密 payload。
- 优点:公钥可公开分发,发送方无需持有私钥;多接收方只需各自公钥;提供机密性与认证(私钥持有者才能解密)。
- 缺点:RSA 密钥较长(2048+ 位),加密速度慢于对称算法;公钥需通过可信渠道分发(如 JWK Set)。
- 适用:OAuth/OIDC、跨组织通信、需要非对称密钥分发的场景。
现代实践中,RSA-OAEP-256(SHA-256)是推荐选择;旧的 RSA1_5(PKCS#1 v1.5)
存在 Bleichenbacher padding oracle 攻击风险,应避免使用。
为什么 JWE 解密需要密钥而 JWS 解码不需要?
JWS(签名令牌)的 payload 仅 base64url 编码,不加密,
任何人都能解码查看内容。验签才需要密钥(公钥或对称密钥),但本工具不解码就验签,仅做格式展示。
JWE(加密令牌)的 payload 被加密为 ciphertext,无密钥无法还原明文。
密钥用于:
- dir:密钥本身即 CEK,直接用于 AES-GCM 解密。
- A128KW 等:密钥是 KEK,用于解包(unwrap)出 CEK,再用 CEK 解密 ciphertext。
- RSA-OAEP-*:私钥用于解密 Encrypted Key 段得到 CEK,再用 CEK 解密 ciphertext。
本工具的 JWE 解密完全在浏览器本地进行,密钥不离开你的设备,不上传任何服务器。
这对调试真实业务的 token 尤为重要——可能含用户信息的 JWE 在本地解密可避免泄露。
JWE 解密失败常见原因?
常见解密失败原因:
- 密钥不匹配:dir 算法密钥长度不符(如 A128GCM 需 16 字节,A256GCM 需 32 字节);
A128KW 密钥长度不符;RSA 私钥与加密时使用的公钥不成对。
- 密文被篡改:ciphertext 或 tag 被修改,认证标签校验失败(GCM 报 MAC failed)。
- IV 错误:IV 段被修改或复制时丢失字符,导致 GCM 解密失败。
- Protected Header 被修改:AAD 包含 Protected Header,header 修改会导致认证标签校验失败。
- 算法不支持:使用了 A128CBC-HS256 等 CBC+HMAC 系列本工具暂不支持的算法。
- PEM 格式错误:RSA 私钥缺少 -----BEGIN ... PRIVATE KEY----- 头尾,
或 Base64 内容含非法字符(如空格、换行不正确)。
- base64url 解码失败:JWE 字符串被截断或包含空格、换行等非法字符。
本工具会友好化常见错误(如认证标签失败、RSA 解密失败、AES-KW 解包失败),并提供具体原因提示。
若提示「暂不支持解密」,可先查看 Protected Header 中的 alg/enc 字段确认算法支持范围。
PBES2 算法是什么?如何用密码解密 JWE?
PBES2(Password-Based Encryption Scheme 2)是 RFC 7518 定义的密码派生密钥方案,
用于将用户密码转为加密密钥。alg 形如 PBES2-HS256+A128KW,由两部分组成:
- PBKDF2(HS256/HS384/HS512):用密码 + salt + 迭代次数派生 KEK,
HS256 对应 HMAC-SHA-256,HS384 对应 SHA-384,HS512 对应 SHA-512。
- AES-KW(A128KW/A192KW/A256KW):用派生的 KEK 包装(wrap)CEK。
Protected Header 需包含两个 PBES2 专属参数:
- p2s(PBES2 salt):base64url 编码的盐值,通常 16 字节随机数,防止彩虹表攻击。
- p2c(PBES2 count):PBKDF2 迭代次数,越大越安全但越慢。
RFC 7518 建议 ≥ 1000,OWASP 2023 建议 ≥ 600,000(针对 HMAC-SHA-256)。
解密流程:用户输入密码 → PBKDF2(密码 + p2s + p2c + 哈希)派生 KEK →
AES-KW 用 KEK 解包(unwrap)出 CEK → 用 CEK 解密 ciphertext。
本工具的「载入 PBES2 示例」按钮会现场生成一个可解密的 PBES2 JWE(密码 toolbox-pbes2-demo,
迭代次数 1000 仅用于演示,生产环境应大幅提高),密码自动填入输入框,点击「解密」即可验证。
安全提示:PBES2 适合用户记忆密码场景,但弱密码易被暴力破解。
生产环境应使用强密码 + 高迭代次数(≥ 100,000),或优先选择 RSA-OAEP-256、
ECDH-ES 等非对称/协商密钥算法。
ECDH-ES 算法是什么?如何用椭圆曲线私钥解密 JWE?
ECDH-ES(Elliptic Curve Diffie-Hellman Ephemeral-Static)是 RFC 7518 定义的
椭圆曲线密钥协商算法,基于 ECDH 让发送方与接收方在不安全的信道上协商出共享密钥。
alg 形如 ECDH-ES 或 ECDH-ES+A128KW,区别在于派生密钥的用途:
- ECDH-ES(直接模式):ECDH 派生的共享秘密 Z 经 Concat KDF 直接派生为 CEK,
Encrypted Key 段为空(与 dir 类似,但 CEK 来源不同)。
- ECDH-ES+A128KW/A192KW/A256KW:ECDH 派生的 Z 经 Concat KDF 派生为 KEK,
再用 KEK 通过 AES-KW 包装(wrap)CEK,Encrypted Key 段非空。
Protected Header 需包含 epk(ephemeral public key,临时公钥,JWK 格式 EC 公钥)字段,
含 kty、crv、x、y 四个子字段。
支持的曲线:P-256(secp256r1)、P-384(secp384r1)、
P-521(secp521r1)。本工具暂不支持其他曲线(如 secp256k1)。
解密流程:
1. 从 Protected Header 提取 epk(临时公钥 JWK)。
2. 用户输入接收方 EC 私钥 JWK(含 kty=EC、crv、d 字段)。
3. 用 epk 公钥 + 接收方私钥执行 ECDH 派生,得到共享秘密 Z。
4. 用 Concat KDF(RFC 7518 Section 4.6.2)从 Z 派生密钥:
- ECDH-ES 直接模式:AlgorithmID = enc 名(如 A128GCM),派生 CEK。
- ECDH-ES+KW 模式:AlgorithmID = alg 名(如 ECDH-ES+A128KW),派生 KEK,再解包 CEK。
5. 用 CEK 解密 ciphertext。
本工具的「载入 ECDH-ES 示例」按钮会现场生成一个可解密的 ECDH-ES JWE(P-256 曲线 + A128GCM 直接模式),
接收方私钥 JWK 自动填入输入框,点击「解密」即可验证 ECDH 派生 + Concat KDF + AES-GCM 解密完整链路。
安全提示:ECDH-ES 提供前向保密能力(ephemeral 临时密钥每次不同,
即使接收方私钥泄露,历史 JWE 仍安全),是现代 JWE 的推荐选择。生产环境应优先选择
ECDH-ES 或 ECDH-ES+A128KW,避免使用 RSA1_5。