以下代码给出了错误的解密错误
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
答案 0 :(得分:1)
第一个
我担心您的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);
...如果这不起作用,我建议进行以下更改:
write()
上的流处理end()
和cipherObject
方法,而不是遗留的update()
和final()
方法。由于更新使用节点流(see here),crypto
模块被认为是“不稳定”,遗留方法可能会保留,但如果引入了更改,它们将成为斩波块中的第一个var dataBuffer = new Buffer(data, vaultEngine.inputEncoding);
cipherObject.write(dataBuffer);
cipherObject.end();
return cipherObject.read().toString(vaultEngine.outputEncoding);