OperationError без подробностей при использовании Web Crypto API
У меня есть сайт на GitHub Pages. Я хочу сделать так, чтобы были страницы, которые можно просматривать только по паролю (хотя, наверное, это нарушение правил, которые никто не читает). Я решил для этого использовать AES и Web Crypto API.
С шифровкой я справился. Вот я дошёл до дешифровки, но функция не выполняется с ошибкой OperationError без подробностей. А номер строки в исключении стоит на закрывающую фигурную скобку функции! Я через try понял, что проблема в crypto.subtle.decrypt. Я попытался поменять AES-CBC на AES-GCM, без толку. Вроде Web Crypto API работает только в безопасных контекстах: я сделал коммит и попытался через GitHub Pages, без толку.
Может, лучше поменять Web Crypto API на что-то другое?
async function decrypt(cipher, cipherText) {
cipher = base64ToBytes(cipher);
let cipherText = base64ToBytes(cipherText), newCipher = new Uint8Array(32);
for(let i = 0, j = 0; j < 32; i++, j++) {
if(i >= cipher.length) i = 0;
newCipher[j] = cipher[i];
}
cipher = await crypto.subtle.importKey(
"raw",
newCipher,
{
name: "AES-CBC",
},
false,
["decrypt"]
);
const text = new TextDecoder().decode(await crypto.subtle.decrypt(
{
name: "AES-CBC",
iv: new Uint8Array(16),
},
cipher,
cipherText
));
if(confirm()) document.body.innerHTML = text;
}