1

我正在创建一个可以加密和解密图像文件的 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);

如何修复图像损坏和文件大小加倍?

4

1 回答 1

1

您正在尝试在密码完成之前对其进行解密。如果你等到管道完成并读取加密文件,它不应该是乱码:

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);
    })
于 2018-09-13T05:02:31.380 回答