Node.js和encryption库

我对Node的encryption库有奇怪的问题。 我写了这个简单的AEStesting脚本:

var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8') var text = "123|123123123123123"; cipher.update(text,'utf8','hex') var crypted = cipher.final('hex') var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8') decipher.update(crypted,'hex','utf8') var dec = decipher.final('utf8') 

当我做console.log(dec)时,它是空的。 由于某种原因,如果我将testing设置为“123 | 123123”,它的工作原理。 那么为什么“123 | 123123”工作,而“123 | 123123123123123”不工作呢?

你需要存储从cipher.update以及cipher.final返回,以确保你拥有一切。

cipher.update“返回encryption的内容,并且在stream式传输时可以用新数据多次调用”:

http://nodejs.org/docs/v0.2.5/api.html#cipher-update-247

cipher.final“返回任何剩余的encryption内容”。

我想你只是像这样每个电话附加结果:

 var crypto = require('crypto'); var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8'); var text = "123|123123123123123"; var crypted = cipher.update(text,'utf8','hex'); crypted += cipher.final('hex'); var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8'); var dec = decipher.update(crypted,'hex','utf8'); dec += decipher.final('utf8'); 

我得到'12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585'用于encryption和'123 | 123123123123123'用于dec在上面用节点v0.2.5

RandomEtc是正确的,但以防万一谁绊脚石在这个问题上使用'base64'作为他们的编码: 不要。 坚持'hex' 。 至less从0.4.2开始,在使用'base64'时会有一个错误,导致数据损坏。 参见: https : //github.com/joyent/node/issues/738/

请注意, +=操作符在更高版本的node.js中不起作用。 请按照Node.js Crypto类中给出的build议,使用更新后的版本返回不同的结果,并使用Buffer.concat()