You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Salesforce Apex中构建JWE用于Callout时遇解密失败求助

JWE生成问题排查方法

针对你遇到的JWE无法被解密工具识别的问题,可以按以下步骤逐一排查:

一、验证CEK的生成与加密流程

  • 确认CEK长度:A128CBC-HS256算法要求CEK必须是32字节(256位)——前16字节用于AES加密,后16字节用于HMAC生成。检查你生成的CEK是否严格符合这个长度,过长或过短都会导致解密失败。
  • 校验RSA-OAEP-256参数:确保你的Apex RSA加密类使用SHA-256作为哈希函数,同时MGF1掩码生成函数也采用SHA-256。很多默认实现会用SHA-1,这会和工具的解密逻辑不匹配。
  • 检查CEK加密后的编码:加密后的CEK必须做Base64URL编码(区别于标准Base64),需替换+为-、/为_,并去掉末尾的=填充字符。

二、排查负载加密细节

  • IV的处理:encryptWithManagedIV生成的结果通常包含IV和密文两部分,JWE要求IV是单独的Base64URL编码段,因此需要将IV从结果中提取出来单独编码,不能与密文合并编码。
  • 明文编码规范:负载(JWT)在加密前必须转换为UTF-8编码的字节数组,避免使用ISO-8859-1等其他编码,否则密文会出现偏差。
  • 密文编码正确性:加密后的负载密文同样需要遵循Base64URL编码规则,确保编码后的字符串格式符合要求。

三、确认认证标签(MAC)生成逻辑

  • 严格遵循拼接顺序:生成MAC的输入必须按以下顺序拼接:
    BASE64URL(保护头) || '.' || BASE64URL(加密后的CEK) || '.' || BASE64URL(IV) || '.' || BASE64URL(密文)
    
    拼接时不能添加任何多余的空格、换行符或其他字符。
  • 密钥截取正确性:必须使用CEK的后16字节作为HMAC-SHA256的密钥,前16字节是AES加密密钥,不能混淆。
  • 标签长度与编码:HMAC-SHA256生成的结果取前16字节(128位)作为认证标签,之后对该标签做Base64URL编码。

四、校验JWE整体结构

  • 确认格式完整性:JWE必须是由.分隔的五个部分:
    保护头(Base64URL) . 加密后的CEK(Base64URL) . IV(Base64URL) . 密文(Base64URL) . 认证标签(Base64URL)
    
    检查是否有部分缺失或分隔符错误。
  • 保护头编码正确性:先将Header转换为紧凑的JSON字符串(无多余空格),再进行Base64URL编码,不能直接对JSON对象编码。

五、分步对比测试

  • 对比已知正确示例:找一个同算法的合法JWE,拆分每个部分,和你生成的对应部分逐一对比,定位差异环节。
  • 单独验证RSA加密:用你的公钥加密一个已知的32字节CEK,再用私钥解密,确认能还原原CEK,排除RSA算法实现问题。
  • 单独验证对称加密与MAC:使用已知的CEK和IV加密明文,生成MAC后用工具验证解密,确认对称加密和MAC生成逻辑无误。

内容的提问来源于stack exchange,提问作者Almond Magnum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:18:21