我想在已经存在的项目上使用 Web Cryptography API。要加密和解密某些东西,我必须使用 CryptoKey,但是当我将 CryptoKey 保存到 localStorage 时,它只保存字符串(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);
}
);
}
错误信息当然是:
无法在“SubtleCrypto”上执行“解密”:参数 2 不是“CryptoKey”类型。2localStorageHandler.js:39 CryptoPromise[对象 CryptoKey]
如果我不使用 localStorage 解密,则加密数据没有问题。