Nodejs 6.10.2 crypto AES密钥长度无效

时间:2017-06-12 15:00:48

标签: node.js encryption

我尝试使用加密来加密文件。这是我的代码:

const crypto = require('crypto');
const fs = require('fs');

const input = fs.createReadStream('test.jpg');
const output = fs.createWriteStream('test.enc');

const sharedSecret = crypto.randomBytes(256);
const initializationVector = crypto.randomBytes(16);

const cipher = crypto.createCipheriv('aes-256-cbc', sharedSecret, initializationVector);

input.pipe(cipher).pipe(output);

我收到了错误:

crypto.js:191
  this._handle.initiv(cipher, toBuf(key), toBuf(iv));
               ^

Error: Invalid key length
    at Error (native)
    at new Cipheriv (crypto.js:191:16)
    at Object.Cipheriv (crypto.js:189:12)
    at Object.<anonymous> (/Users/lijinyao/Projects/HyperAlbum/Encryption/encrypt.js:10:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)

我虽然sharedSecret长度应该与aes-length相同,但事实并非如此。我应该用多长时间?谢谢:))

1 个答案:

答案 0 :(得分:6)

你的字节与位混淆。 aes-256表示256位= 32字节。

试试这个:

const crypto = require('crypto');
const fs = require('fs');

const input = fs.createReadStream('test.jpg');
const output = fs.createWriteStream('test.enc');

const sharedSecret = crypto.randomBytes(32);
const initializationVector = crypto.randomBytes(16);

const cipher = crypto.createCipheriv('aes-256-cbc', sharedSecret, initializationVector);

input.pipe(cipher).pipe(output);

如果您看不到差异,则更改为:

  

const sharedSecret = crypto.randomBytes(32);