升级到NodeJS后密钥长度无效6

以下用于encryption和解密对我们的支付网关服务的请求的代码在Node Js 5.7.0中正常工作

function Encrypt(plainText, workingKey) { var m = crypto.createHash('md5'); m.update(workingKey); var key = m.digest('binary'); var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; var cipher = crypto.createCipheriv('aes-128-cbc', key, iv); var encoded = cipher.update(plainText, 'utf8', 'hex'); encoded += cipher.final('hex'); return encoded; }; function Decrypt(encText, workingKey) { var m = crypto.createHash('md5'); m.update(workingKey) var key = m.digest('binary'); var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); var decoded = decipher.update(encText, 'hex', 'utf8'); decoded += decipher.final('utf8'); return decoded; }; 

但是,升级到NodeJS 6.0(也试过6.1)后,我们得到以下错误。

 Debug: internal, implementation, error Error: Uncaught error: Invalid key length at Error (native) at new Cipheriv (crypto.js:184:16) at Object.Cipheriv (crypto.js:182:12) 

我们的密钥长度一直是16个字符(即128位),并在升级前工作。 为什么现在这个问题会发生?

我在这里发布答案,希望能帮助别人。

这个问题似乎是由于对密钥使用“二进制”摘要引起的。 解决方法是简单地调用摘要函数并将该密钥存储为缓冲区。

固定的代码读为

 function Encrypt(plainText, workingKey) { var m = crypto.createHash('md5'); m.update(workingKey); var key = m.digest(); var iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'; var cipher = crypto.createCipheriv('aes-128-cbc', key, iv); var encoded = cipher.update(plainText, 'utf8', 'hex'); encoded += cipher.final('hex'); return encoded; }; 

感谢@ Artjom-b的回答。