Я хочу зашифровать некоторые данные в Node.js, используя схему шифрования с проверкой подлинности, например AES -GCM.
Если я запускаю следующий пример кода
app.get("/test", function(req,res) {
var key = "12345678901234567890123456789012";
var iv = "123456789012";
var cipher = crypto.createCipheriv("id-aes256-GCM",key.toString("binary"),iv.toString("binary"));
var decipher = crypto.createDecipheriv("id-aes256-GCM",key.toString("binary"),iv.toString("binary"));
console.log(decipher.update(cipher.update("bla")));
console.log(decipher.update(cipher.final()));
console.log(decipher.final());
});
Я не получаю вывод консоли, но сообщение об ошибке «TypeError :DecipherFinal failed». Если я использую шифр AES -256 -CTR вместо «id -aes256 -GCM», этот код работает нормально и печатает «bla» на консоли.
Что я делаю не так?
редактировать:
Дальнейшее исследование показывает, что cipher.update ("bla" )возвращает "â" (одиночный символ... странно ), а cipher.final ()возвращает пустую строку. Я думаю, что это не может быть правильный зашифрованный текст, который должен иметь хотя бы размер открытого текста...