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

使用sjcl解密非JSON格式ArrayBuffer密文及JWK转PKCS8问题

问题解答

1. 能否使用sjcl解密?

不能。sjcl.decrypt是为sjcl自带对称加密方案输出的封装JSON格式密文设计的,且sjcl本身没有内置RSA-OAEP算法实现,完全不匹配你的加密场景。

2. JWK格式私钥转PKCS8及解密方案

jsrsasign原生支持JWK格式密钥的导入,也支持直接导出PKCS8格式密钥,你可以按以下步骤操作:

  • 第一步:导入JWK私钥(可按需导出PKCS8)
// 解析你拿到的JWK格式私钥字符串
const jwk = JSON.parse(privateKeyJsonStr);
// 直接导入JWK生成RSA密钥实例,无需手动转PKCS8
const rsaPrivateKey = KEYUTIL.getKey(jwk);

// 若确实需要PKCS8格式的PEM文件,执行下行即可导出
const pkcs8PrivateKeyPem = KEYUTIL.getPEM(rsaPrivateKey, "PKCS8PRV");
  • 第二步:使用RSA-OAEP解密数据
// 将Uint8Array格式的密文转为base64
const cipherBase64 = btoa(String.fromCharCode(...cipherUint8Array));
// 用SHA-256对应配置执行RSA-OAEP解密,得到十六进制格式的明文
const decryptedHex = RSAOAEP.decrypt(cipherBase64, rsaPrivateKey, "sha256");
// 十六进制转Uint8Array后解析为原始数据
const decryptedBytes = new Uint8Array(decryptedHex.match(/../g).map(h => parseInt(h, 16)));
const originalData = JSON.parse(new TextDecoder().decode(decryptedBytes));

注意事项

  • 请使用完整功能版的jsrsasign库,精简版可能会缺失RSAOAEP、KEYUTIL相关模块
  • 解密时指定的哈希算法必须和加密时的SHA-256完全一致,否则会解密失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:10