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, что должно быть правильным способом дешифрования.

заранее спасибо!

0 ответов

Другие вопросы по тегам