admin管理员组文章数量:1323330
I'm trying to decrypt a string using SubtleCrypto that was pre-generated.
Instead of getting decrypted text I'm getting the error: Failed to execute 'decrypt' on 'SubtleCrypto': parameter 2 is not of type 'CryptoKey'.
console.log(window.crypto.subtle.decrypt({name:"AES-CBC", iv:""}, "1234567890123456", "i4+WxNH8XYMnAm7RsRkfOw=="));
I've tried researching the error but haven't e across anything related to such a basic example. What am I doing wrong?
I'm trying to decrypt a string using SubtleCrypto that was pre-generated.
Instead of getting decrypted text I'm getting the error: Failed to execute 'decrypt' on 'SubtleCrypto': parameter 2 is not of type 'CryptoKey'.
console.log(window.crypto.subtle.decrypt({name:"AES-CBC", iv:""}, "1234567890123456", "i4+WxNH8XYMnAm7RsRkfOw=="));
I've tried researching the error but haven't e across anything related to such a basic example. What am I doing wrong?
Share asked May 19, 2021 at 19:16 GFLGFL 1,4463 gold badges17 silver badges29 bronze badges1 Answer
Reset to default 7The parameters have the wrong types: IV and data must be passed as BufferSource
, the key as CryptoKey
, see SubtleCrypto.decrypt()
. A CryptoKey
is returned by SubtleCrypto.importKey()
, which is used to import the key.
WebCrypto API (as low level API) does not provide support for data conversion, e.g. Base64 encoded data or strings to BufferSource
, so other helper methods must be used for this.
The following code decrypts the ciphertext:
var keyData = str2ab("1234567890123456");
var iv = new Uint8Array(16).buffer;
var ciphertext = b642ab("i4+WxNH8XYMnAm7RsRkfOw==");
(async () => {
var decrypted = await decrypt();
var decryptedStr = new TextDecoder().decode(decrypted);
console.log(decryptedStr);
})();
async function decrypt() {
var key = await importKey();
try {
return await crypto.subtle.decrypt(
{ name: "AES-CBC", iv: iv },
key,
ciphertext
);
} catch (ex) {
console.error("Error: Name: ", ex.name, ", Message: ", ex.message);
}
}
async function importKey() {
var key = await crypto.subtle.importKey(
"raw",
keyData,
{ name: "AES-CBC" },
true,
["decrypt", "encrypt"]
);
return key;
}
// Helper -----------------------------------------------
// https://stackoverflow./a/11058858
function str2ab(str) {
const buf = new ArrayBuffer(str.length);
const bufView = new Uint8Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
// https://stackoverflow./a/21797381/9014097
function b642ab(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
本文标签: javascriptCrypto Subtle Decrypt Parameter Not Type quotCryptoKeyquotStack Overflow
版权声明:本文标题:javascript - Crypto Subtle Decrypt Parameter Not Type "CryptoKey" - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742139687a2422527.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论