下面的代码给出了错误的解密错误
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发布于 2014-05-13 23:16:01
首先是
我担心你的IV被直接硬编码到你的方法中,这表明你在每次加密时都使用相同的IV,这是非常糟糕的。IV应该是加密随机的(不可预测的),并且每次加密都是不同的。你可以把它和你的加密文本一起存储起来,然后把它拉出来用来解密,但你不应该使用同样的IV。如果你犯了这个级别的错误,这表明你需要更多地研究如何适当地使用加密,以便它真正保护你想要保护的数据。Start here。
现在尝试直接解决您的问题:
According to the docs看起来你颠倒了你的input encoding和output encoding变量,应该是:
var Fcontent = cipherObject.update(data, vaultEngine.inputEncoding, vaultEngine.outputEncoding);
Fcontent += cipherObject.final(vaultEngine.outputEncoding);..。如果这不起作用,我建议进行以下更改:
cipherObject上使用流处理write()和end()方法,而不是传统的update()和final()方法。crypto模块被认为是“不稳定的”,特别是因为更新为使用节点流(see here),遗留方法可能会保留下来,但如果在发送数据进行解密之前破坏的更改是从数据中introduced.var dataBuffer = new Buffer(data, vaultEngine.inputEncoding);
cipherObject.write(dataBuffer);
cipherObject.end();
return cipherObject.read().toString(vaultEngine.outputEncoding);https://stackoverflow.com/questions/23634404
复制相似问题