当前位置: 首页 > 知识库问答 >
问题:

如何使用id-aes256-GCM和Node.js加密?“TypeError:DecipherFinal失败”

靳茂
2023-03-14
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());
});

进一步的研究表明,cipher.update(“bla”)返回“-”(单个字符...奇怪),而cipher.final()返回一个空字符串。我认为这不可能是一个正确的密文,至少应该有明文的大小...

共有1个答案

颜哲彦
2023-03-14

OpenSSL中的GCM模式工作良好。它也已经用其他实现进行了测试。我知道PolarSSL SSL库有自己的AES GCM实现,PolarSSL也可以与OpenSSL一起工作。

AES的GCM加密模式需要特定的GCM相关参数。当前的NodeJS API无法向OpenSSL提供这些值。因此,调用失败,但不是出现干净的错误。(这与其说是NodeJS问题,不如说是OpenSSL问题)。

(StevenLoomen也在评论中指出了原因,但我想给大家一个答案。)

 类似资料:
  • 我将AES与salt和IV一起用于加密和解密一个唯一的ID,但它给出了javax。加密。解密时出现BadPaddingException。 每次解密数据时给出的完整错误堆栈跟踪 加密方法- 解密方法 我是JCA的新手。

  • 我有一个问题如下-有一个jsp页面register.jsp,它的表单如下- 正如您所看到的,我正在jsp上加密国家和州的id,现在处理这个请求的控制器方法如下所示- 用户bean有一个名为country的属性,它引用对象country类这里是我的country类- 提交表单后,我发现了这个错误- 无法将类型java.lang.String的属性值转换为属性City.State.country.id

  • 我试图了解如何通过使用PBKDF2和SHA256获得派生密钥。 我很纠结,需要一个清晰易懂的例子。 到目前为止我所拥有的: > 我找到了https://en.wikipedia.org/wiki/PBKDF2其中有一个示例,但使用SHA1,具有以下值: 密码plnlrtfpijpuhqylxbgqiyipieyxvfsavzgxbbcfusqkozwpngsyjqlmjsytrmd UTF8 盐A

  • 我正在使用C#在客户机/服务器应用程序中执行一些加密方法。NET框架和PHP。加密方法是AES-256-GCM,在PHP中非常简单。这个NET代码,我从这里复制了一些修改。这个NET版本产生了不同的值。 在PHP版本中,我可以这样写 在C#中,我试图使其保持一致 编辑: 所有方法都包括在内。 这个问题不是重复的

  • 问题内容: 我这样在Node.js中加密了一个字符串。 我注意到nodejs中的缓冲区就像十六进制,但每2个连续字符都成对出现。因此,如果我将其转换为十六进制,则长度只有一半。 例: 缓冲: 十六进制: 现在,我在aes256中使用的密钥的长度不能为64。这里,缓冲区的长度为32,十六进制的长度为64。 我想在golang中解密此密码,我将不得不使用此密钥和iv对其进行解密。 golang中的ae

  • 我有以下java代码用于加密纯文本: