我想在现有项目上使用Web密码学API。要加密和解密某些内容,我必须使用CryptoKey,但是当我将CryptoKey保存到localStorage时,它只会保存String(CryptoKey)而不是对象。
是否可以序列化/转换简单类型(字符串)的CryptoKey?
我的解密方法是
function decryptDataWithAES(keyName)
{
var decrypt_promise;
var aesKey = localStorage.getItem(keyName + 'key')
var item = localStorage.getItem(keyName)
var invokeVektor = localStorage.getItem(keyName + 'vector')
console.log("aesKey", aesKey )
crypto.subtle.decrypt({ name: "AES-CBC", iv: invokeVektor }, aesKey, item).then(function (result) {
decrypted_data = new Uint8Array(result); decrypted_data = new Uint8Array(result);
decrypt_promise = convertArrayBufferViewtoString(decrypted_data);
console.log('decryptDataWithAES ' + decrypt_promise);
return decrypt_promise;
},
function(e){
console.log(e.message);
}
);
}
Run Code Online (Sandbox Code Playgroud)
错误消息当然是:
无法在'SubtleCrypto'上执行'decrypt':参数2不是'CryptoKey'类型。2localStorageHandler.js:39 CryptoPromise [对象CryptoKey]
如果我不使用localStorage进行解密,则加密数据没有问题。