[英]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 encoding
和output encoding
變量,應該是:
var Fcontent = cipherObject.update(data, vaultEngine.inputEncoding, vaultEngine.outputEncoding);
Fcontent += cipherObject.final(vaultEngine.outputEncoding);
...如果不起作用,我建議進行以下更改:
cipherObject
上使用流處理write()
和end()
方法,而不是傳統的update()
和final()
方法。 crypto
模塊被認為是“不穩定的”,特別是因為更新為使用了節點流( 請參閱此處 ),舊方法可能會保留,但是如果引入了重大更改,它們將是斬波模塊中的第一個方法。 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.