4

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

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 代码会抛出“Invalid IV length”。

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

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

4

1 回答 1

7

Node.js 团队回复了我。

“欧洲央行不使用 IV,所以你应该只传递一个长度为零的缓冲区”

let ivBuffer = Buffer.alloc(0);

开发人员必须弄清楚传递一个长度为 0 的缓冲区而不是不传递任何参数,这似乎很奇怪。我希望他们至少更新文档。

于 2016-12-14T05:24:49.340 回答