4

次の node.js コードは、ECB モードで AES 128 を使用し、0 バイトで満たされた初期化ベクトル (IV) を使用して暗号を作成しようとします。<< 暴言 >> 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 チームから連絡がありました。

「ECB は IV を使用しないため、代わりに長さゼロのバッファを渡す必要があります」

let ivBuffer = Buffer.alloc(0);

開発者が、パラメーターを渡さないのではなく、長さ 0 のバッファーを渡すように理解する必要があるのは奇妙に思えます。少なくともドキュメントを更新してほしい。

于 2016-12-14T05:24:49.340 に答える