Следующий код 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).
Является ли это ошибкой или я делаю что-то неправильно?
«Поддержка устаревших систем, построенных до Второй мировой войны»: MEGA.nz использует ECB для шифрования файлов с ключами обмена ключами, поскольку они считают, что они имеют лучшую производительность, а файлы и ключи обмена являются случайными, поэтому они подвержены любой опасности. С другой стороны, в некоторых реализациях отсутствует ЕЦБ, что ухудшает их использование. –