2016-12-14 4 views
3

Следующий код node.js пытается создать шифр с использованием AES 128 в режиме ECB с вектором инициализации (IV), заполненным 0 байтами. < < rant >> Я знаю, что зашифровать с помощью режима ECB следует избегать любой ценой, но он все равно должен работать для поддержки устаревших систем, созданных до Второй мировой войны (когда впервые были обнаружены опасности шифрования в режиме ECB). < </rant >>.Node.js crypto: Недопустимая длина 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 код генерирует "Invalid длину IV".

Для 128-разрядного (16-байтового) шифрования AES должен иметь 16-байтовый вектор инициализации (IV).

Является ли это ошибкой или я делаю что-то неправильно?

+0

«Поддержка устаревших систем, построенных до Второй мировой войны»: MEGA.nz использует ECB для шифрования файлов с ключами обмена ключами, поскольку они считают, что они имеют лучшую производительность, а файлы и ключи обмена являются случайными, поэтому они подвержены любой опасности. С другой стороны, в некоторых реализациях отсутствует ЕЦБ, что ухудшает их использование. –

ответ

4

Команда Node.js вернулась ко мне.

«ЕЦБ не использует капельницу, так что вы должны просто передать нулевой длины буфера А вместо»

let ivBuffer = Buffer.alloc(0); 

Кажется странным, что разработчик должен выяснить передать буфер 0-длины, а чем отсутствие какого-либо параметра. Мне жаль, что они, по крайней мере, не обновили документы.

+0

Хе-хе, может быть, они могут создать класс «Необязательный». Тогда ясно, что вы можете передать 'Optional.empty()'. Спасибо за отчетность. Не забывайте, что режим ECB небезопасен для подавляющего большинства проблем. –

+0

Нашел оба ответа и ответ команды Node.js через Google. Присоединение команды Node.js ответ здесь для потомков: https://github.com/nodejs/node/issues/10263 –

Смежные вопросы