2016-06-30 6 views
1

Ich versuche, einen generierten Schlüssel in Web Cryptography API/SubtilCrypto zu exportieren.Wie exportiert man CryptoKey?

Wenn ich ausführen bin crypto.subtle.exportKey erhalte ich folgende Fehlermeldungen: in Chrome:

DOMException: Schlüssel ist nicht extrahierbar (InvalidAccessError)

und in Firefox

Ein Parameter oder eine Operation wird vom zugrunde liegenden Objekt (InvalidAccessError)

nicht unterstützt
cryptoTestObject = crypto.subtle.generateKey(
      { 
       name: "AES-CBC", 
       length: 256, //can be 128, 192, or 256 
      }, 
      false, //whether the key is extractable (i.e. can be used in exportKey) 
      ["encrypt", "decrypt"] //can "encrypt", "decrypt", "wrapKey", or "unwrapKey" 
     ) 
     .then(function (key) { 
      //returns a key object 
      saveKeyInLocalStorage(keyName, key); 
      console.log('CryptoPromise' + key); 
     }) 
     .catch(function (err) { 
      console.log(err); 
     }); 

function saveKeyInLocalStorage(keyName, aesKey) { 
    var exportPromise = crypto.subtle.exportKey('raw', aesKey); 
    exportPromise.then(function (aesKey_RAW) { 
     localStorage.setItem(keyName + 'key', aesKey_RAW); 
     console.log("saved."); 
    }); 
} 

Wie kann ich einen Schlüssel generieren, der im Rohformat exportierbar ist.

Antwort

0

Sie generieren den Schlüssel mit der extrahierbaren Einstellung false. Setzen Sie es stattdessen auf true:

crypto.subtle.generateKey(
    { 
     name: "AES-CBC", 
     length: 256 
    }, 
    true, // <-- here 
    ["encrypt", "decrypt"] 
)