2016-12-14 96 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 –

相關問題