我有以下代码加密字符串:
var crypto = require('crypto'),
algorithm = 'aes-128-cbc',
key = new Buffer('9vApxLk5G3PAsJrM', 'utf8'),
iv = new Buffer('FnJL7EDzjqWjcaY9', 'utf8');
function encrypt(text, key){
/* GET - crypted */
try {
var cipher = crypto.createCipheriv(algorithm, key, iv),
crypted = cipher.update(text, 'utf8', 'hex');
crypted += cipher.final('hex');
return crypted;
} catch(e) { return console.log(e)}
}
console.log(encrypt('blablabla', key))
当我在节点v8.9.0中运行此代码时,我收到此错误:
Error: Invalid key length
at new Cipheriv (crypto.js:219:16)
at Object.Cipheriv (crypto.js:217:12)
我尝试不同的键和iv长度,但我总是得到相同的错误...所以它需要写入密钥长度?
我需要使用crypto.createCipheriv,因为crypto.createCipher在新节点版本和新节点版本中被描述为描述开发者比普通版本快20%。
答案 0 :(得分:0)
我发现我有来自MySQL数据库的旧密钥,它全部用作密钥,我定义了全局密钥,因此不使用全局密钥,因为MySQL读取旧的加密密钥并使用20字节长的旧MySQL数据库加密密钥。 。在MySQL数据库中使用UPDATE我得到了新的16字节长度加密密钥,现在正在工作。