首页/新闻资讯/正文详情

jose 的 JWEHeaderParameters 接口全解:识别 JWE 受保护头部参数及其在加密解密流程中的底层验证

发布时间:2026/9/28 3:03:36 来源:云帆数科 栏目:资讯中心
jose 的 JWEHeaderParameters 接口全解:识别 JWE 受保护头部参数及其在加密解密流程中的底层验证
网络安全认证鉴权后端【免费下载链接】joseJWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes项目地址https://gitcode.com/gh_mirrors/jo/jose点击查看免费下载本篇指南聚焦于 jose 开源仓库中 JWEJSON Web Encryption的头部类型定义JWEHeaderParametersdocs/types/interfaces/JWEHeaderParameters.md逐一剖析alg、enc、crit、zip、kid、jwk、x5c等 11 个可识别头部参数的类型约束、安全语义与运行时前提并结合 src/types.d.ts、src/lib/jwe_encrypt.ts、src/lib/jwe_decrypt.ts 等源码揭示这些头部参数在CompactEncrypt/FlattenedEncrypt加密与解密验证链中的实际作用。读完本文你将能正确构造 JWE 受保护头部、理解为何zip只能用DEF、为何crit必须被完整性保护并在自己的签名/加密场景中安全使用这些参数。一、接口定位JWE 头部参数的识别清单JWEHeaderParameters是 jose 内部所有 JWE 加密、解密入口共用的头部类型。其 JSDoc 自述为Recognized JWE Header Parameters, any other Header members may also be present.——即它只负责识别并显式建模JWE 规范RFC 7516定义的头部参数同时通过索引签名保留任意自定义扩展成员/** Recognized JWE Header Parameters, any other Header members may also be present. */ export interface JWEHeaderParameters extends JoseHeaderParameters { alg?: JWEKeyManagementAlgorithm enc?: JWEContentEncryptionAlgorithm crit?: string[] zip?: DEF | (string {}) [propName: string]: unknown }该定义位于 src/types.d.ts关键点有三继承自JoseHeaderParameters公共头部成员kid、x5t、x5c、x5u、jku、jwk、typ、cty在 JoseHeaderParameters 中统一定义JWS 与 JWE 共享JWS 侧对应 JWSHeaderParameters。alg与enc使用细粒度联合类型alg取值为JWEKeyManagementAlgorithm密钥管理算法enc取值为JWEContentEncryptionAlgorithm内容加密算法两者均以(string {})收尾允许未知的扩展标识符通过类型检查实际支持与否由运行时的算法表决定。索引签名[propName: string]: unknown与 RFC 保持一致允许crit声明的自定义扩展参数以及其他私有头部成员存在。注意CompactJWEHeaderParameterssrc/types.d.ts在JWEHeaderParameters基础上将alg、enc提升为必选属性因为 Compact 序列化不存在共享非受保护头部与每接收方头部alg/enc必须出现在受保护头部中。二、继承的公共成员kid/jwk/x5c等 JOSE 公共头部JoseHeaderParameters定义了 JWE 与 JWS 共用的 8 个成员src/types.d.ts本接口文档逐一给出了 JOSE 规范名称成员类型JOSE 规范名称语义要点kid?stringkid (Key ID)密钥标识供接收方在密钥集中定位密钥x5t?stringx5t (X.509 Certificate SHA-1 Thumbprint)证书 SHA-1 指纹base64urlx5c?string[]x5c (X.509 Certificate Chain)证书链数组首项为叶子证书x5u?stringx5u (X.509 URL)证书链的 URL 引用jku?stringjku (JWK Set URL)指向 JWK Set 的 URLjwk?OmitJWK, 私钥成员jwk (JSON Web Key)只允许公钥 JWK见下文typ?stringtyp (Type)媒体类型如JWTcty?stringcty (Content Type)载荷内容类型如嵌套签名场景其中jwk的类型约束最为严格。接口文档明确指出This must be a public JSON Web Key; private and symmetric key parameters are not permitted.对应类型为OmitJWK, d | p | q | k | dp | dq | qi | priv | oth——即内嵌的 JWK 被排除掉 RSA/EC/OKP 私钥指数、oct 对称密钥k、AKP 私钥priv以及多素数 RSA 的oth等全部私密成员src/types.d.ts。这是安全设计头部是明文传输的任何私钥材料都不允许放入头部。三、JWE 专属成员之一alg密钥管理算法algAlgorithm是 JWE 的密钥管理算法标识决定 CEKContent Encryption Key如何被保护与分发。类型JWEKeyManagementAlgorithmsrc/types.d.ts枚举了 jose 支持的 18 个标识符按家族划分直接模式dir直接用 CEK 加密无密钥包装AES 密钥包装A128KW、A192KW、A256KWAES-GCM 密钥包装A128GCMKW、A192GCMKW、A256GCMKWECDH 密钥协商ECDH-ES、ECDH-ESA128KW、ECDH-ESA192KW、ECDH-ESA256KWRSA 密钥封装RSA-OAEP、RSA-OAEP-256、RSA-OAEP-384、RSA-OAEP-512PBES2 口令派生PBES2-HS256A128KW、PBES2-HS384A192KW、PBES2-HS512A256KW文档与类型定义均注明某一标识符是否可用取决于运行时Web Crypto 支持面。类型末尾的(string {})允许扩展算法标识符通过编译。在源码层面算法能力集中登记在 src/lib/jwe_algorithms.ts 的JWE表中每条目描述密钥类型kty、Web Crypto 底层算法名如RSA-OAEP、ECDH、AES-KW、PBKDF2、所需密钥用法与哈希如RSA-OAEP-256对应SHA-256。加密时checkEncryptHeaders首先从合并后的头部取出alg缺少或非字符串即抛出JWEInvalidsrc/lib/jwe_encrypt.ts随后由jweAlgorithm(alg)查表未知值抛出JOSENotSupported。四、JWE 专属成员之二enc内容加密算法encEncryption Algorithm定义 CEK 与明文的实际加密算法类型JWEContentEncryptionAlgorithmsrc/types.d.ts枚举 6 个值A128GCM、A192GCM、A256GCMAES-GCM96 位 IVA128CBC-HS256、A192CBC-HS384、A256CBC-HS512AES-CBC HMAC 复合模式128 位 IVenc的底层参数CEK 位长、IV 位长、是否为 CBC 复合模式登记在 src/lib/jwe_algorithms.ts 的ENC表中例如A128CBC-HS256的cekBits为 256128 位密钥 128 位 HMAC 密钥、ivBits为 128、cbc为true。加密流程中 CEK 长度、IV 长度均由此表推导未显式设置 CEK 时按encEntry.cekBits生成随机 CEKgenerateCek解密时若encrypted_key解出的 CEK 长度与cekBits不符会静默替换为随机 CEK再继续解密——这是 RFC 7516 §11.5 的时序攻击缓解要求见 src/lib/jwe_decrypt.ts。五、JWE 专属成员之三crit关键头部参数critCritical的类型为string[]是必须被接收方理解的扩展头部参数名列表。jose 在生产侧与消费侧对crit有不同的强制约束源码 src/lib/options.ts 中的validateCrit完整呈现了规则必须被完整性保护crit一旦出现就必须位于受保护头部protectedHeader否则抛JWEInvalidMUST be integrity protected。必须是合法数组非空字符串数组不得包含重复值validateCritDuplicatesRFC 7515 §4.1.11 禁止生产者列出重复名。扩展参数必须可识别crit中列出的每个名字都必须被消费方识别——通过内置的JWE_RECOGNIZEDJWE 默认无内置扩展见 src/lib/options.ts或解密选项crit显式声明未被识别的名字抛JOSENotSupported。扩展参数必须存在crit列出的每个参数都必须实际出现在头部中若该参数要求完整性保护选项值为true还必须位于受保护头部。对应地加密侧通过 EncryptOptions.crit 传入识别清单解密侧通过 DecryptOptions.crit 传入其中CritOption的文档特别警告该机制只做语法与完整性校验不会替你处理扩展参数语义操作成功后仍需自行按 profile 验证参数是否存在并处理。六、JWE 专属成员之四zip压缩算法唯一支持DEFzipCompression Algorithm是本接口中运行时约束最明显的成员。接口文档与类型定义src/types.d.ts一致声明唯一支持的值是DEFDEFLATE且要求运行时提供CompressionStream/DecompressionStreamAPI。加密侧 src/lib/deflate.ts 的validateZip施加三重约束zip取值非DEF→JOSENotSupportedzip必须位于受保护头部否则明文压缩信息可被篡改而不被发现→JWEInvalid运行时不提供CompressionStream如某些受限运行时→JOSENotSupported。实际压缩通过new CompressionStream(deflate-raw)完成src/lib/deflate.ts。解密侧使用DecompressionStream并受maxDecompressedLength上限约束默认 250 KB见 src/lib/jwe_decrypt.ts防止压缩炸弹设为0直接拒绝一切压缩 JWE设为Infinity关闭限制。完整的zip实战示例可见 cookbook/jwe.mjs其中zip: DEF与alg: A128KW、enc: A128GCM组合使用并保留在受保护头部。七、在加密 API 中的落地受保护头部与三区头部模型JWEHeaderParameters在 jose 的加密 API 中并非只有一个去处。RFC 7516 定义了三类头部jose 分别提供设置方法头部位置是否受完整性保护Flattened 设置方法序列化字段Protected Header是base64url 编码进protectedsetProtectedHeader()protectedShared Unprotected Header否setSharedUnprotectedHeader()unprotectedPer-Recipient Unprotected Header否setUnprotectedHeader()header三类头部的类型均为JWEHeaderParameters。加密流程 src/lib/jwe_encrypt.ts 会将三者浅合并成joseHeader用于算法校验同时 checkDisjoint 强制三者的参数名两两不相交重复参数名抛JWEInvalid。受保护头部最终被b64u(JSON.stringify(...))序列化进 JWE 令牌src/lib/jwe_encrypt.ts因此只要涉及完整性保护或安全敏感的参数alg、enc、crit、zip都必须通过setProtectedHeader放置。以 Compact 序列化为例src/jwe/compact/encrypt.tsconst jwe await new jose.CompactEncrypt( new TextEncoder().encode(It’s a dangerous business, Frodo, going out your door.), ) .setProtectedHeader({ alg: RSA-OAEP-256, enc: A256GCM }) .encrypt(publicKey) console.log(jwe) // five dot-separated base64url segments注意CompactEncrypt.setProtectedHeader的参数类型是CompactJWEHeaderParametersalg、enc必选这正是第一节提到的必选约束的落地。而 FlattenedEncrypt 则允许同时使用setProtectedHeader、setSharedUnprotectedHeader、setUnprotectedHeader三个入口并可搭配setAdditionalAuthenticatedData()AAD 同样参与完整性保护但不加密。八、密钥管理相关头部apu/apv/p2c的补充与JWEHeaderParameters紧邻的还有JWEKeyManagementHeaderParameterssrc/types.d.ts它建模 ECDH-ES 与 PBES2 特有的算法输入apuAgreement PartyUInfo/apvAgreement PartyVInfo参与 ECDH 的 ConcatKDF 派生p2cPBES2 CountPBKDF2 迭代次数解密时受maxPBES2Count默认 10000上限约束p2s、iv、epk已标记deprecated仅用于测试向量验证不应在生产代码中使用。这些参数通过各加密类的setKeyManagementParameters()设置如 src/jwe/compact/encrypt.ts由 src/lib/jwe_encrypt.ts 在头部校验完成后并入合适的 JOSE 头部再重新执行checkDisjoint避免生成参数与既有头部参数名冲突。九、解密侧的对应校验头部参数如何被消费解密是加密的镜像流程同样以JWEHeaderParameters为类型锚点。以 compactVerify 的姊妹函数 compactDecrypt 与 Flattened/General 解密为例src/lib/jwe_decrypt.ts 的解密核心decryptRecipientCore按序执行头部合并joseHeader { ...parsedProt, ...header, ...unprotected }并再次校验三者参数名不相交src/lib/jwe_decrypt.tscrit校验validateCrit与加密侧同一套规则zip校验validateZip非法值或未受保护即拒绝alg/enc白名单DecryptOptions.keyManagementAlgorithms与contentEncryptionAlgorithms过滤特别地所有 PBES2 算法默认禁止必须显式列入keyManagementAlgorithms才允许解密src/types.d.ts、src/lib/jwe_decrypt.ts密钥解析alg dir时用enc描述密钥否则用alg描述密钥prepareKey解密与解压按encEntry参数解密zip: DEF时在maxDecompressedLength限制内解压。解密结果protectedHeader字段的类型即为JWEHeaderParameters见 FlattenedDecryptResultCompactDecryptResult则使用必含alg/enc的CompactJWEHeaderParameters。十、实践要点小结alg与enc是必配组合加密时必须同时提供Compact 序列化中类型层面强制二者缺一即抛JWEInvalidalg决定密钥管理方式enc决定 CEK 与内容加密方式。安全敏感参数一律放入受保护头部alg、enc、crit、zip均要求或被要求位于setProtectedHeader设置的头部中zip与crit在源码层面有强制校验。jwk只能内嵌公钥Omit类型在编译期排除全部私钥/对称密钥成员杜绝明文泄露。PBES2 默认被拒解密时需要显式keyManagementAlgorithms白名单且受maxPBES2Count默认 10000约束。zip: DEF有运行时门槛需要CompressionStream/DecompressionStream解密端默认 250 KB 解压上限。通过本接口文档与 src/types.d.ts、src/lib/jwe_encrypt.ts、src/lib/jwe_decrypt.ts、src/lib/options.ts、src/lib/deflate.ts 等源码的对照阅读你可以精确掌握 jose 中 JWE 头部的每一个可识别成员——从类型约束到运行时校验再到加密/解密调用链中的实际落点为构造安全、合规的 JWE 令牌提供完整依据。赞分享网络安全认证鉴权后端【免费下载链接】joseJWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes项目地址https://gitcode.com/gh_mirrors/jo/jose点击查看免费下载相关推荐jose 的 JWE 加密选项接口 EncryptOptions 与 crit 关键头参数处理机制jose 的 JWE 加密选项接口 EncryptOptions 与 crit 关键头参数处理机制 本篇技术指南聚焦 jose 库中 JWE 加密操作所用的 E网络安全认证鉴权后端jose 中 decodeProtectedHeader 与 ProtectedHeaderParameters 完全指南解码 JWS/JWE/JWT 受保护头jose 中 decodeProtectedHeader 与 ProtectedHeaderParameters 完全指南解码 JWS/JWE/JWT 受保护网络安全认证鉴权后端jose 中的 JoseHeaderParameters 接口JWE 与 JWS 公共 JOSE Header 参数全解析jose 中的 JoseHeaderParameters 接口JWE 与 JWS 公共 JOSE Header 参数全解析 导读 在 jose 这个面向 No网络安全认证鉴权后端上一篇从论文到代码CoCa-pytorch中的PaLM架构实现细节全揭秘下一篇APK编辑器终极使用指南从安装到精通创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

ChatLab 为什么值得选:本地优先的 AI 聊天记录分析方案与隐私防护设计
ChatLab 为什么值得选:本地优先的 AI 聊天记录分析方案与隐私防护设计

【免费下载链接】ChatLab Local-first chat history analyzer with AI. | 本地优先的 AI 聊天记录分析工具 项目地址: https://gitcode.com/gh_mirrors/cha/ChatLab 点击查看 免费下载 ChatLab 是一款本地优先(Local-first)的 AI 聊天记录分… · 2026/9/28 3:03:30

用 Vue 与 Zig 构建原生桌面应用:Native SDK Vue 示例完整实战指南
用 Vue 与 Zig 构建原生桌面应用:Native SDK Vue 示例完整实战指南

桌面应用跨平台 【免费下载链接】native Toolkit for building native desktop apps 项目地址: https://gitcode.com/gh_mirrors/ze/native 点击查看 免费下载 Native SDK(Toolkit for building native desktop apps)是一个用 Zig 编写原生外… · 2026/9/28 3:03:29

react-final-form FormSpyRenderProps 完整指南:FormSpy 渲染属性对象与 form API 实战
react-final-form FormSpyRenderProps 完整指南:FormSpy 渲染属性对象与 form API 实战

前端UI组件 【免费下载链接】react-final-form 🏁 High performance subscription-based form state management for React 项目地址: https://gitcode.com/gh_mirrors/re/react-final-form 点击查看 免费下载 FormSpyRenderProps 是 react-final-form … · 2026/9/28 3:03:29

Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment
Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment

文章主要内容总结 本文研究了多模态大语言模型(具体为ChatGPT-4o)利用静态行车记录仪图像进行类人交通场景解读的潜力,重点聚焦与老年司机评估相关的三项任务:交通密度评估、交叉口可见性评估和停车标志识别。这些任务需上下文推理而非简单目标检测。研究采用零样本、少样… · 2026/9/28 3:32:43

Leveraging Large Language Models for Classifying App Users‘ Feedback
Leveraging Large Language Models for Classifying App Users‘ Feedback

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)解决应用用户反馈分类的挑战,传统方法依赖有监督机器学习,但受限于标注数据集的规模和质量。研究通过三个核心实验评估了4种先进LLMs(GPT-3.5-Turbo、GPT-4o、Flan-T5、Llama3-70b)的性能: LLMs在用户反馈分类中的基… · 2026/9/28 3:32:43

Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...
Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...

文章主要内容总结 本文通过实验评估了大型语言模型(LLMs)在奥地利及欧盟增值税(VAT)法框架下辅助法律决策的能力。研究聚焦于两种提升LLM性能的方法——微调(fine-tuning)和检索增强生成(RAG),并在两类案例中进行验证:一是权威教科书案例,二是税务咨询公司的真实案… · 2026/9/28 3:32:43

学Java别走弯路,这5个方向最吃香
学Java别走弯路,这5个方向最吃香

学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15

AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions
AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions

AlphaAgents相关总结与翻译 一、文章主要内容总结 (一)研究背景与问题 传统股票投资组合管理依赖人类分析师处理海量信息(如财务披露、财报、市场新闻等),存在信息处理效率低、易受认知偏差(如损失厌恶、过度自信)影响的问题,可能错失投资收益机会。尽管AI在数据处理… · 2026/9/28 3:32:08

Java跑亿级报表OOM被开除?我靠达梦并行查询+虚拟线程分片拉取,3分钟出结果,DBA看懵了!
Java跑亿级报表OOM被开除?我靠达梦并行查询+虚拟线程分片拉取,3分钟出结果,DBA看懵了!

// 💥 翻车现场:经典“单线程+全量加载”的自杀式报表生成 String sql = “SELECT province, sum(amount), count(distinct user_id) FROM t_trade … GROUP BY province”; List<Map<String, Object>> result = jdbcTemplate.queryForList(sql); // 💥 5亿行… · 2026/9/28 3:32:02

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介&#xff1a;这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程&#xff0c;从线性调频&#xff08;LFM&#xff09;信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑&#xff0c;面向电子信息工程、计算机、数学等专业学生&#xff0c;适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介&#xff1a;基于PyTorch的多模态虚假新闻检测项目完整代码包&#xff0c;面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者&#xff0c;解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征&#xff0c;以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码