0

在我加密我的数据之前,我已经把它变成了这种格式:

let a = new TextEncoder().encode(JSON.stringify(data))

加密后,我将其编码为以这种方式存储:

let b = new Uint8Array(a)

最后将其转换为base64。

现在我想用 sjcl 库函数解密我的数据sjcl.decrypt

  • 我有我privateKey的 JSON 字符串。
  • 我有我cipher的 as Uint8Array
  • 加密后,我已将其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 导出密钥。我可以转换jwkpkcs8?

4

0 回答 0