Node.js加密:无效的IV长度

时间:2016-12-14 03:50:29

标签: node.js cryptography aes initialization-vector

以下node.js代码尝试在ECB模式下使用AES 128创建一个密码,初始化向量(IV)填充0字节。 <<咆哮>>我意识到应该不惜一切代价避免使用ECB模式进行加密,但它仍然需要支持在第二次世界大战之前构建的遗留系统(当首次发现加密ECB模式的危险时) )<。< / rant>>。

let keyBuffer = Buffer.from("DoNotUseUTF8Keys",'utf8');
let ivBuffer = Buffer.alloc(16); // 16 bytes set to 0
//try {
try {
  let cipher = createCipheriv("AES-128-ECB", keyBuffer, ivBuffer);
} catch (e)
{
  console.log(e.message);
}

当调用createCipheriv(或createDeciperiv)时,node.js代码抛出"无效的IV长度"。

对于128位(16字节)密码,AES应该有一个16字节的初始化向量(IV)。

这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:5)

Node.js团队回复了我。

" ECB并没有使用IV,所以你应该只传递一个零长度的缓冲区"

let ivBuffer = Buffer.alloc(0);

奇怪的是,开发人员应该想办法传递一个0长度的缓冲区,而不是传递任何参数。我希望他们至少更新文档。