AES-GCM-256, как расшифровать строки base64 с помощью crypto.subtle
Мне даны эти элементы:
nonce => строка base64
textToDecrypt => строка base64
ключ => строка base64
function str2ab(str) {
var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
function _base64ToArrayBuffer(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;
}
let formatedKey = crypto.subtle.importKey('raw', _base64ToArrayBuffer(key), { "name": "AES-GCM", "length": 256 }, true, ["encrypt", "decrypt"])
formatedKey.then((key) => {
crypto.subtle.decrypt({
name: 'AES-GCM',
iv: str2ab(nonce)
}, key, str2ab(textToDecrypt)).then((decryptedText) => {
console.log("decryptedText", decryptedText)
})
})
Когда я это сделаю, я получаю OperationError
, я что-то не так делаю при импорте ключа? или передача одноразового номера? Я пробовал несколько вещей, например, декодировать одноразовый номер и текст из base64, но здесь я немного потерялся.
Я думаю, что это может быть что-то действительно стандартное (ввод base64), поэтому кто-то может знать, как правильно с этим справиться.
Я не могу дать здесь настоящие входные данные по соображениям безопасности, мне просто интересно, учитывая входные данные base64, что должно быть правильным способом дешифрования.
заранее спасибо!