Antes de cifrar mis datos, los puse en este formato:
let a = new TextEncoder().encode(JSON.stringify(data))Después del cifrado, lo he codificado para almacenarlo de esa manera:
let b = new Uint8Array(a)y finalmente lo convirtió en base64.
Ahora quiero descifrar mis datos con la función de biblioteca sjcl.decrypt .
privateKey como cadena JSON.cipher como Uint8Array .cipher en su códec original después del cifrado con: new TextDecoder().decode(cipher) ¿Ahora que? sjcl lanza, json decode: this isn't json! . Entendido, porque mis datos cifrados son un ArrayBuffer.
Entonces mi pregunta: ¿es posible descifrar mi caso con sjcl? Al buscar en la fuente sjcl, parece que el descifrado necesita un JSON. Pero no tengo JSON.
No es posible editar el proceso de encriptación.
¡Gracias!
------------ ACTUALIZAR ------------
Así es como se genera el keyPair:
await window.crypto.subtle.generateKey({ name: "RSA-OAEP", modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: { name: "SHA-256" }, }, true, ["encrypt", "decrypt"]);Luego, la clave se exporta así (recibo esa clave):
await window.crypto.subtle.exportKey( "jwk", keyPair.privateKey );Cifrado con clave pública:
await window.crypto.subtle.encrypt({ name: "RSA-OAEP" }, publicKey, data); En mi aplicación no tengo acceso a WebCrypto Api. Probé la biblioteca sjcl, pero parece que el cifrado/descifrado rsa no es posible. Probado con la biblioteca jsrsasign, pero no admite claves exportadas jwk. ¿Puedo convertir jwk a pkcs8 ?