我在Node的加密库中遇到了奇怪的问题。我写了这个简单的AES测试脚本:
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)时,它为null。由于某种原因,如果我将测试设置为“123 | 123123”,则它可以工作。那么,为什么“123 | 123123”有效而“123 | 123123123123123”无效?
最佳答案
您需要存储cipher.update和cipher.final的返回值,以确保您拥有一切。
cipher.update“返回加密的内容,并且在流传输时可以用新数据多次调用”:
http://nodejs.org/docs/v0.2.5/api.html#cipher-update-247
cipher.final“返回所有剩余的加密内容”。
我认为您只需将结果附加到每个调用中,如下所示:
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');
我在上面使用 Node v0.2.5获得了“12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585”和dec的“123 | 123123123123123”