J'utilise Webcrypto API
pour certains travaux cryptographiques sur le client. Bien que je ne puisse pas envelopper et déplier les clés, le navigateur a toujours renvoyé l'erreur suivante.Enveloppez et déverrouillez les clés avec l'API WebCrypto
DOMException [OperationError: "The operation failed for an operation-specific reason"
Vous et moi ne pouvons pas faire grand chose avec cette erreur, j'ai donc collé mon code.
function wrapPrivateKey(privateKey, wrappingKey) {
var iv = window.crypto.getRandomValues(new Uint8Array(12));
return window.crypto.subtle.wrapKey(
"jwk",
privateKey,
wrappingKey,
{
name: "AES-GCM",
length: 256,
iv: iv,
}
)
.then(function (key) {
return {
"key": StringToB64(arrayBufferToString(key)),
"iv": StringToB64(arrayBufferToString(iv))
};
})
.catch(function (err) {
console.error(err);
return false;
});
}
function unwrapPrivateKey(wrappedPrivateKey, unwrappingKey) {
var obj = JSON.parse(B64ToString(wrappedPrivateKey));
var key = stringToArrayBuffer(B64ToString(obj["key"]));
var iv = stringToArrayBuffer(B64ToString(obj["iv"]));
return window.crypto.subtle.unwrapKey(
"jwk",
key,
unwrappingKey,
{
name: "AES-GCM",
length: 256,
iv: iv,
},
{
name: "RSA-OAEP",
hash: {name: "SHA-256"},
},
true,
["encrypt", "decrypt"]
)
.then(function (key) {
return key;
})
.catch(function (err) {
console.error(err);
return false;
});
}
Je ne sais pas si le problème est lié à la conversion des objets clés en chaînes. Malheureusement, j'ai besoin de le convertir en une chaîne pour le conserver dans une base de données.
Avec l'API WebCrypto, il est fondamental que vous affichiez également la version du navigateur car le support est minime. Je vois que vous essayez d'effectuer toutes les opérations sur une seule ligne: diviser cette ligne et au moins trouver quelle méthode est le coupable. C'est un débogage de base. –