如何手动解密由指定代码生成的加密JWT Token?
手动解密加密JWT Token的方法
你的代码生成的是**JWE(JSON Web Encryption)**格式的加密Token,而非仅签名的普通JWT。要手动解密,需使用与加密时完全一致的密钥、编码方式和算法,以下是具体实现步骤:
核心前提
- 必须持有加密时使用的
Jwt:DecryptionKey和Jwt:Key(分别用于解密操作和验证签名) - 密钥编码需严格匹配:解密密钥用
Encoding.Default,签名密钥用Encoding.UTF8 - 算法需完全对齐:密钥包装算法
Aes256KW、内容加密算法Aes256CbcHmacSha512、签名算法HmacSha256
C#解密代码示例
using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Text; public string DecryptJweToken(string encryptedToken, IConfiguration _config) { // 1. 构建解密凭证(与加密逻辑完全一致) var decryptingKey = new SymmetricSecurityKey(Encoding.Default.GetBytes(_config["Jwt:DecryptionKey"])); var decryptingCredentials = new EncryptingCredentials( decryptingKey, SecurityAlgorithms.Aes256KW, SecurityAlgorithms.Aes256CbcHmacSha512); // 2. 构建签名验证密钥 var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"])); // 3. 配置Token验证参数 var validationParams = new TokenValidationParameters { ValidIssuer = _config["Jwt:Issuer"], ValidAudience = _config["Jwt:Audience"], IssuerSigningKey = signingKey, TokenDecryptionKey = decryptingKey, ValidateLifetime = true // 可选:验证Token是否过期 }; // 4. 解密并验证Token合法性 var handler = new JwtSecurityTokenHandler(); SecurityToken decryptedToken; handler.ValidateToken(encryptedToken, validationParams, out decryptedToken); // 5. 获取解密后的完整Token或声明信息 var jwtToken = decryptedToken as JwtSecurityToken; return jwtToken?.ToString(); // 可直接访问jwtToken.Claims获取具体声明 }
关键说明
ValidateToken方法会自动完成解密→签名校验→有效期验证的全流程,确保Token未被篡改且合法有效- 若仅需解密(跳过验证),可调整
TokenValidationParameters中的验证开关(如ValidateIssuer = false),但生产环境不建议这么做 Encoding.Default依赖系统默认编码,跨平台部署时建议改为固定编码(如UTF8)避免编码不一致导致的解密失败
内容的提问来源于stack exchange,提问作者mz1378
相关产品推荐
相关产品推荐

