すでに存在するプロジェクトでWeb暗号化APIを使用したいと考えています。 何かを暗号化して解読するにはCryptoKeyを使用する必要がありますが、CryptoKeyにlocalStorageに保存すると、オブジェクトの代わりにString(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' on 'に復号化' を実行に失敗しました:パラメータ2がないタイプ '暗号鍵' です。 2localStorageHandler.js:39 CryptoPromise [オブジェクトCryptoKey]
localStorageを使用せずに復号化しても、データの暗号化に問題はありません。生の形式であなたの鍵を保存するには
function decryptDataWithAES(keyName)
{
var decrypt_promise;
// read raw value of aesKey
var aesKey_RAW = localStorage.getItem(keyName + 'key')
var importPromise = crypto.subtle.importKey('raw', aesKey_RAW, 'AES-CBC', true, ['encrypt','decrypt']);
importPromise.then(function(aesKey){
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);
}
);
}, function(e){ console.log(e.message) });
}
:
未加工キーのエクスポートにはまだ問題があります。私はsaveKeyInLocalStorage関数 'cryptoTestObject = crypto.subtle.generateKey(...).then(function(key){ saveKeyInLocalStorage(keyName、key);' を呼び出して、exportPromiseでChromeのエラーメッセージ「DOMException :キーが抜け出せない(InvalidAccessError) 'Firefoxで'パラメータまたは操作が基底のオブジェクトでサポートされていない(InvalidAccessError) ' – AntonDerProgrammierer