Estoy tratando de crear una aplicación web para generar pares de claves públicas/privadas RSA y estoy probando mi código.
(async function() { const subtle = crypto.subtle; const keyConfig = { name: "RSA-OAEP", modulusLength: 2048, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256" } const key = await subtle.generateKey(keyConfig, true, ["encrypt", "decrypt"]); const public = key.publicKey; const private = key.privateKey; const exported_public = subtle.exportKey("pkcs8", public) .then(arr => { alert(arr) // I know it's an ArrayBuffer }) .catch(err => { alert(err) }); })();En este caso, la declaración .catch está alertando el error "InvalidAccessError: La clave no es del tipo esperado". Hice una búsqueda rápida en Google y no apareció nada. ¿Cómo puedo solucionar esto?
No puede exportar claves públicas como "pkcs8" , porque PKCS#8 - la "Especificación de sintaxis de información de clave privada" se usa para texto sin formato o, a veces, claves privadas cifradas.
Para las claves públicas, usaría "spki" , que es la abreviatura de SubjectPublicKeyInfo tal como se define en las especificaciones del certificado X509v3 . Es una estructura similar a (sin cifrar) PKCS#8. Ambos contienen el tipo de clave (usando un OID) y, por supuesto, el valor de la clave.
Tenga en cuenta que algunas bibliotecas pueden permitirle realizar este tipo de codificación/descodificación por error. Probablemente todavía se convertirán a / desde SubjectPublicKeyInfo , por lo que "spki" probablemente siga siendo el formato que desea.