Я хочу зашифровать и расшифровать файлы с помощью потоковых каналов с кодировкой 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: когда я убираю шестнадцатеричное кодирование из шифрования, код работает. Но мне нужно шестнадцатеричное кодирование.