WebCrypto使用AES-GCM密钥解包RSA-OAEP密钥抛出DOMException问题
报错原因
你触发错误的核心原因是待解包的RSA私钥用途配置不合法:
- RSA-OAEP属于非对称加密算法,用途是严格区分的:公钥仅支持
encrypt权限,私钥仅支持decrypt权限 - 你生成RSA密钥对时,虽然传入的用途数组是
["encrypt", "decrypt"],但Web Crypto API会自动拆分权限:公钥拿到encrypt权限,私钥实际仅拿到decrypt权限 - 你在
unwrapKey的最后一个参数中,给私钥指定了不支持的encrypt权限,浏览器校验用途匹配失败就抛出了对应异常
修复方案
只需要把unwrapKey的最后一个参数(待解包密钥用途)改为仅包含decrypt即可,修改后的代码段如下:
var unwrapped = await window.crypto.subtle.unwrapKey( "jwk", wrappedRSAKey, AESkey, {name: "AES-GCM",iv: iv}, { name: "RSA-OAEP", hash: "SHA-256" }, true, ["decrypt"] // 仅保留RSA私钥支持的decrypt权限 );
额外校验点
如果修改后仍有报错,可以排查这两个点:
- 确认解包时使用的
iv和封装时用的是完全相同的实例,没有被意外修改 - 确认
wrappedRSAKey没有被截断或篡改,还是wrapKey返回的原始ArrayBuffer
内容的提问来源于stack exchange,提问作者pierre
相关产品推荐
相关产品推荐

