在我加密我的数据之前,我已经把它变成了这种格式:
let a = new TextEncoder().encode(JSON.stringify(data))
加密后,我将其编码为以这种方式存储:
let b = new Uint8Array(a)
最后将其转换为base64。
现在我想用 sjcl 库函数解密我的数据sjcl.decrypt
。
- 我有我
privateKey
的 JSON 字符串。 - 我有我
cipher
的 asUint8Array
。 - 加密后,我已将其
cipher
放入原始编解码器:new TextDecoder().decode(cipher)
现在怎么办?sjcl 抛出,json decode: this isn't json!
. 明白了,因为我的加密数据是一个ArrayBuffer。
所以我的问题是:是否可以用 sjcl 解密我的案例? 在查看 sjcl 源时,似乎解密需要一个 JSON。但我没有 JSON。
无法编辑加密过程。
谢谢!
- - - - - - 更新 - - - - - -
这就是生成密钥对的方式:
await window.crypto.subtle.generateKey({
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: { name: "SHA-256" },
}, true, ["encrypt", "decrypt"]);
然后像这样导出密钥(我收到那个密钥):
await window.crypto.subtle.exportKey(
"jwk",
keyPair.privateKey
);
使用公钥加密:
await window.crypto.subtle.encrypt({ name: "RSA-OAEP" }, publicKey, data);
在我的应用程序中,我无法访问 WebCrypto Api。尝试了 sjcl 库,但似乎 rsa 加密/解密是不可能的。使用 jsrsasign 库测试,但不支持 jwk 导出密钥。我可以转换jwk
成pkcs8
?