我想使用经过身份验证的加密方案(如 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 失败”。如果我使用密码 AES-256-CTR 而不是“id-aes256-GCM”,则此代码可以正常工作并在控制台上打印“bla”。
我究竟做错了什么?
编辑:
进一步调查显示, cipher.update("bla") 返回“â”(单个字符...奇怪)并且 cipher.final() 返回一个空字符串。我认为这不可能是正确的密文,至少应该具有明文的大小......