Ошибка Неверная длина ключа возникает, если длина ключа не соответствует указанному алгоритму. Например, в размещенном коде указан aes-256-ecb
, который определяет AES-256, то есть AES с длиной ключа 32 байта. Однако используемый ключ имеет длину всего 24 байта, поскольку он Base64 декодируется при считывании в буфер. Это означает, что должен использоваться либо 32-байтовый ключ (например, если UTF-8 используется в качестве кодировки вместо Base64 при чтении в буфер), либо AES-192 (указанный как aes-192-ecb
).
Недопустимая длина IV ошибка возникает, когда IV указан в режиме ECB (который вообще не использует IV), или когда в режиме, который использует IV, его длина не соответствует размеру блока алгоритма (например, 16 байтов для AES). Поскольку здесь используется режим ECB, просто введите null
для IV (Buffer.from([])
тоже работает).
Пример с использованием AES-192 и 24-байтовой клавиши:
const crypto = require("crypto");
const key = "aaaaaabbbbbbccccccddddddssssssaa";
const secret = "01234567890123456789012345678901";
// Encryption
const cipher = crypto.createCipheriv("aes-192-ecb", Buffer.from(key, "base64"), null);
const encryptedSecret = cipher.update(secret, "utf8", "base64") + cipher.final("base64");
console.log(encryptedSecret);
// Decryption
const decipher = crypto.createDecipheriv("aes-192-ecb", Buffer.from(key, "base64"), null);
const decryptedSecret = decipher.update(encryptedSecret, "base64", "utf8") + decipher.final("utf8");
console.log(decryptedSecret);
Во время дешифрования в качестве выходного кодирования используется UTF-8, что, конечно, возможно только в том случае, если открытый текст совместим с этим, в противном случае необходимо применять подходящее кодирование, например Base64.