簡體   English   中英

Node.js加密拋出錯誤

[英]Node.js Crypto throwing error

以下代碼給出了錯誤的解密錯誤

vaultEngine.AESDecrypt = function (encKey, data) {
    var cipherObject = crypto.createDecipheriv('aes-256-cbc', encKey, "a2xhcgAAAAAAAAAA");
    var Fcontent = cipherObject.update(data, vaultEngine.outputEncoding, vaultEngine.inputEncoding);
    Fcontent += cipherObject.final(vaultEngine.inputEncoding);
    //console.log("Decryption data is:"+Fcontent);
    return Fcontent;
}

具體來說,此錯誤:

TypeError: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decr
ypt

首先

我擔心您的IV直接硬編碼到您的方法中,這表明您對每種加密都使用相同的IV,這很糟糕,很糟糕。 IV應該是密碼隨機的(不可預測的),並且每次加密都應不同。 您可以將其與加密的文本一起存儲,然后將其拉回以用於解密,但您不應使用相同的IV。 如果您犯了此級別的錯誤,則表明您需要對如何正確使用加密進行更多研究,以便它實際上可以保護要保護的數據。 從這里開始

現在嘗試直接解決您的問題:


根據文檔 ,您好像已經反轉了input encodingoutput encoding變量,應該是:

var Fcontent = cipherObject.update(data, vaultEngine.inputEncoding, vaultEngine.outputEncoding);
Fcontent += cipherObject.final(vaultEngine.outputEncoding);

...如果不起作用,我建議進行以下更改:

  1. cipherObject上使用流處理write()end()方法,而不是傳統的update()final()方法。 crypto模塊被認為是“不穩定的”,特別是因為更新為使用了節點流( 請參閱此處 ),舊方法可能會保留,但是如果引入了重大更改,它們將是斬波模塊中的第一個方法。
  2. 在發送數據進行解密之前,請根據您的數據創建一個緩沖區。 這將確保您正確創建了緩沖區,並將最小化解密階段所需的工作:

var dataBuffer = new Buffer(data, vaultEngine.inputEncoding);
cipherObject.write(dataBuffer);
cipherObject.end();
return cipherObject.read().toString(vaultEngine.outputEncoding);

暫無
暫無

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

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