Node.js Crypto AES-128 шифрует поток с отступом - PullRequest
0 голосов
/ 13 декабря 2018

Я успешно использую NodeJS для шифрования файла следующим образом:

let cipher = crypto.createCipheriv('aes-128-cbc', key, iv),
    crypted = cipher.update(file_data, 'binary');
return Buffer.concat([crypted, cipher.final()]);

Это создает файл с хешем, который точно соответствует нашему целевому шифрованию, то есть команде OpenSSL на стороне сервера:

openssl aes-128-cbc -e -in file -out file.enc -nosalt -iv <iv_str> -K <k_str>

Цель - обновить наши системы для использования потоков nodejs.Документация узла и другие публикации предлагают следующий способ шифрования потоков:

cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let file_stream = fs.createReadStream(local_file, 'binary'),
    write_stream = fs.createWriteStream(`${local_file}.enc`, 'binary');
file_stream.pipe(cipher).pipe(write_stream);

, однако при этом игнорируется добавление cipher.final().Без этого шифрование всегда приводит к файлу с неправильным хешем.Я пытался:

  1. создать Transform, который бы добавил оставшиеся отступы.Это не сработает, потому что вы не можете вызвать final на шифре, на который не было вызвано update
  2. , установив автозаполнение с помощью setAutoPadding.Во всех случаях это приводит к ошибке Error: error:0607F08A:digital envelope routines:EVP_EncryptFinal_ex:data not multiple of block length

Как я могу зашифровать с потоками так же, как я изначально шифровал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...