Node.js шифрование и дешифрование удваивает размер файла - PullRequest
0 голосов
/ 13 сентября 2018

Я создаю приложение Node.js, которое может шифровать и дешифровать файлы изображений. Однако, когда мой код запускается, я получаю различные результаты: иногда дешифрованное изображение выглядит как оригинал вверху, но нижняя половина выглядит поврежденной, иногда дешифрованное изображение полностью там, но выглядит так, как будто оно было сильно сжато, а иногда дешифрованное изображение слишком продажно, чтобы открыть. Вот изображение , которое демонстрирует это. Единственное, что объединяет эти результаты, так это то, что зашифрованные и дешифрованные изображения в два раза превышают размер исходного изображения.

const fs = require('fs');
const crypto = require('crypto');

var path = 'C:\\Users\\' + windowsUserName + '\\Desktop\\image';
    var fileExtension = '.jpg';
    var password = '1234';
    var algorithm = 'aes-256-cbc';

    var image = fs.createReadStream(path + fileExtension);

    var encryptedImage = fs.createWriteStream(path + ' encrypted' + fileExtension);
    var decryptedImage = fs.createWriteStream(path + ' decrypted' + fileExtension);

    var encrypt = crypto.createCipher(algorithm, password);
    var decrypt = crypto.createDecipher(algorithm, password);

    image.pipe(encrypt).pipe(encryptedImage);
    image.pipe(encrypt).pipe(decrypt).pipe(decryptedImage);

Как исправить повреждение изображения и удвоение размера файла?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы пытаетесь расшифровать шифр до его завершения. Если вы подождете, пока канал завершит свою работу, и прочитаете зашифрованный файл, он не будет искажен:

const fs = require('fs');
const crypto = require('crypto');

var path = 'file path';
    var fileExtension = '.jpg';
    var password = '1234';
    var algorithm = 'aes-256-cbc';

    var image = fs.createReadStream(path + fileExtension);
    var encryptedImage = fs.createWriteStream(path + ' encrypted' + fileExtension);
    var encrypt = crypto.createCipher(algorithm, password);
    image.pipe(encrypt).pipe(encryptedImage);

    encryptedImage.on("finish", function(){
        var decrypt = crypto.createDecipher(algorithm, password);
        var decryptedImage = fs.createWriteStream(path + ' decrypted' + fileExtension);
        var encryptedImage = fs.createReadStream(path + ' encrypted' + fileExtension);
        encryptedImage.pipe(decrypt).pipe(decryptedImage);
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...