以下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)。
这是一个错误还是我做错了什么?
答案 0 :(得分:5)
Node.js团队回复了我。
" ECB并没有使用IV,所以你应该只传递一个零长度的缓冲区"
let ivBuffer = Buffer.alloc(0);
奇怪的是,开发人员应该想办法传递一个0长度的缓冲区,而不是传递任何参数。我希望他们至少更新文档。