节点v8.9.0错误:密钥长度crypto.createCipheriv无效

时间:2017-11-07 10:24:41

标签: node.js

我有以下代码加密字符串:

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%。

1 个答案:

答案 0 :(得分:0)

我发现我有来自MySQL数据库的旧密钥,它全部用作密钥,我定义了全局密钥,因此不使用全局密钥,因为MySQL读取旧的加密密钥并使用20字节长的旧MySQL数据库加密密钥。 。在MySQL数据库中使用UPDATE我得到了新的16字节长度加密密钥,现在正在工作。