AES-GCM などの認証済み暗号化スキームを使用して、Node.js の一部のデータを暗号化したいです。
次のサンプルコードを実行すると
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」というエラー メッセージが表示されます。「id-aes256-GCM」の代わりに暗号 AES-256-CTR を使用すると、このコードは正常に機能し、コンソールに「bla」と出力されます。
私は何を間違っていますか?
編集:
さらに調査すると、cipher.update("bla") は "â" (単一の文字...奇妙な) を返し、cipher.final() は空の文字列を返すことがわかります。これは、少なくとも平文のサイズを持つべき正しい暗号文にはなり得ないと思います...