错误:使用crypto.createDecipheriv时密钥长度无效

时间:2018-04-13 05:36:20

标签: node.js cryptography base64 aes

我想使用aes-128-cbc进行解码,但它会转到Invaid密钥长度,问题是什么?

下面是代码:

const crypto = require('crypto');
var key = 'DoCKvdLslTuB4y3EZlKate7XMottHski1LmyqJHvUhs'+'=';
var iv = crypto.randomBytes(16) //key.substr(0,16)
var keyhex = new Buffer(key,'base64').toString('hex')
var decipher = crypto.createDecipheriv('aes-128-cbc',keyhex,iv)

接下来是错误报告: crypto.js:267   this._handle.initiv(cipher,toBuf(key),toBuf(iv));                ^

Error: Invalid key length
    at new Decipheriv (crypto.js:267:16)
    at Object.createDecipheriv (crypto.js:627:10)
    at Object.<anonymous> (/home/sheen/workspace/app/base64.js:8:23)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)

如何解决问题?

1 个答案:

答案 0 :(得分:0)

你正在混合二进制和十六进制。十六进制是一个文本表示编码的字节。

在base 64解码后,你的密钥大小是32字节/ 256位。但是,然后您创建一个由64个字符组成的十六进制表示。这些被再次转换为字节,所以现在你的密钥大小为64字节/ 512位 - 这是一个无效的密钥大小。

要使用二进制文件,只需删除.toString('hex'),就可以了。