2016-12-14 64 views
3

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

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

“二战前修建配套遗留系统”:MEGA.nz使用欧洲央行,因为他们认为它具有更好的性能和文件都加密使用共享密钥文件密钥和共享密钥是完全随机的,所以他们遭受任何危险。另一方面,一些实现缺乏ECB,使得使用它的性能变差。 –

回答

4

Node.js团队找到了我。

“ECB不利用IV,所以应只通过一个零长度缓冲区,而不是”

let ivBuffer = Buffer.alloc(0); 

似乎很奇怪的是,开发人员应该必须找出通过一个长度为0的缓冲液而比不传递任何参数。我希望他们至少会更新文档。

+0

嘿,也许他们可以创建一个'Optional'类。那么很显然你可以通过'Optional.empty()'。感谢您回报。不要忘记,ECB模式对绝大多数问题都不安全。 –

+0

通过Google找到了这个答案和提到的Node.js团队答案。在这里附上Node.js团队的答案以供后人使用:https://github.com/nodejs/node/issues/10263 –

相关问题