Я хочу зашифровать некоторые данные в 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 fail". Если я использую шифр AES-256-CTR вместо "id-aes256-GCM", этот код отлично работает и печатает "bla" на консоли.
Что я делаю неправильно?
изменить
Дальнейшее исследование показывает, что cipher.update( "bla" ) возвращает "â" (один символ... странный), а cipher.final() возвращает пустую строку. Я думаю, что это не может быть правильный зашифрованный текст, который должен иметь по крайней мере размер открытого текста...