簡體   English   中英

如何在Node.JS加密中使用id-aes256-GCM? “TypeError:DecipherFinal失敗”

[英]How to use id-aes256-GCM with Node.JS crypto? “TypeError: DecipherFinal fail”

我想使用經過身份驗證的加密方案(如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()返回一個空字符串。 我認為這不能是一個正確的密文,至少應該有明文的大小......

OpenSSL中的GCM模式運行正常。 它已經與其他實現一起測試過。 我知道PolarSSL SSL庫有自己的AES的GCM實現,而PolarSSL可以與OpenSSL一起使用。

AES的ECM加密模式需要特定的GCM相關參數。 當前的NodeJS API無法將這些值提供給OpenSSL。 因此,調用失敗,但沒有干凈的錯誤。 (這更像是一個OpenSSL問題,而不是NodeJS問題)。

(StevenLoomen也在評論中指出了原因,但我希望每個人都能看到答案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM