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

C#使用JOSE库将JSON加密为A256KW+A256GCM的JWE Token报错如何解决

C# JOSE库JWE加密报错修复方案

错误原因

  • 你选择的A256KW密钥加密算法,在JOSE库的JweRecipient构造逻辑中要求密钥参数为byte[]类型,你直接传入了字符串类型的密钥,触发类型校验失败。
  • 附加要求:A256KW算法要求密钥长度必须为256位(即32字节),你示例中的"Some Key"长度不符合要求,实际使用时需要替换为符合长度的密钥,否则会触发后续的长度校验错误。
  • 错误提示AesKeyWrap management algorithm expects key to be byte[] array.的中文翻译为:AesKeyWrap密钥管理算法要求传入的密钥为字节数组类型。

修复代码

using System.Text;
using Jose;
using Newtonsoft.Json;

// 注意:A256KW要求密钥长度为32字节,实际使用请替换为你自己的安全密钥
string keyStr = "你需要使用长度为32个字符的安全密钥xxxxxxxxxxxx"; 
// 把字符串密钥转为字节数组
byte[] keyBytes = Encoding.UTF8.GetBytes(keyStr);

// 你的业务payload对象,这里替换为你自己的anyPayJson
var anyPayJson = new 
{
    page = "2",
    sc = "http://dummy.com/"
};
// 序列化payload为JSON字符串
string payloadJson = JsonConvert.SerializeObject(anyPayJson);

// 加密时传入字节数组类型的密钥
string token = JWE.Encrypt(
    payloadJson, 
    new[] { new JweRecipient(JweAlgorithm.A256KW, keyBytes, null) }, 
    JweEncryption.A256GCM
);

冗余代码说明

你原有代码中定义的securityKey和JwtPayload类型的payload变量没有被实际使用,可以直接删除,JOSE库的JWE.Encrypt方法不需要依赖Microsoft.IdentityModel下的安全密钥对象。


内容的提问来源于stack exchange,提问作者Kryp2 Gemini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:01