шифровать и дешифровать файлы с помощью node.js с помощью потоковых каналов? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу зашифровать и расшифровать файлы с помощью потоковых каналов с кодировкой aes-256-cbc и hex.

Файлы огромные, поэтому я не могу сделать это в памяти

Я настроил все, и он правильно шифрует файлы, возвращая шестнадцатеричный файл. Однако, когда я пытаюсь расшифровать этот шестнадцатеричный файл, он выдает ошибку

bad_decrypt

, как будто он не ожидает шестнадцатеричное кодирование.

Эта проблема возникает только с потоками, если я пытаюсь вручную расшифровать шестнадцатеричную строку, выводимую во время шифрования

decipher.update(encryptedHexString, 'hex', 'utf8')

, тогда это работает, потому что вы можете указать ожидаемую кодировку. Однако, когда вы просто делаете pipe(decipher), это не работает.

Вот мой код:

async encrypt(filePath: string, outFilePath: string, algorithm: string, key: string, iv: string) {

        var cipher = createCipheriv(algorithm, key, iv);
        cipher.setEncoding('hex');

        var input = createReadStream(filePath);
        var output = createWriteStream(outFilePath);

        await input.pipe(cipher).pipe(output);

    }

async decrypt(filePath: string, outFilePath: string, algorithm: string, key: string, iv: string) {

        var decipher = createDecipheriv(algorithm, key, iv);
        decipher.setAutoPadding(false);

        var input = createReadStream(filePath);
        var output = createWriteStream(outFilePath);

        await input.pipe(decipher).pipe(output);
    }

Полагаю, мне нужен способ расшифровки, чтобы ожидать кодирование в шестнадцатеричном формате. PS: когда я убираю шестнадцатеричное кодирование из шифрования, код работает. Но мне нужно шестнадцатеричное кодирование.

...