Node.js 解密包含内容的加密pdf后,解密结果为空

Node.js 解密包含内容的加密pdf后,解密结果为空,node.js,pdf,encryption,cryptography,Node.js,Pdf,Encryption,Cryptography,使用Node.js加密库,我对PDF进行了如下加密: //encrypting the pdf fs.readFile('./full.pdf', function (err,data) { if (err) { return console.log(err); } var cipher = crypto.createCipher('aes-256-cbc', encPassword); var text = data; var crypt

使用Node.js加密库,我对PDF进行了如下加密:

//encrypting the pdf
fs.readFile('./full.pdf', function (err,data) {
    if (err) {
        return console.log(err);
    }
    var cipher = crypto.createCipher('aes-256-cbc', encPassword);
    var text = data;
    var crypted = cipher.update(text,'utf8','hex');
    crypted += cipher.final('hex');
    console.log(crypted);
});
然后,我将
加密
并通过以下程序运行它:

var decipher = crypto.createDecipher('aes-256-cbc', encPassword);
var dec = decipher.update(args[0],'hex','utf8');
dec += decipher.final('utf8');                                            

fs.writeFileSync('./output.pdf', dec);
./output.pdf现在是一个空白页,其中应该包含完整的原始内容

注意


当我使用相同的代码(不包括fs.writeFileSync('./output.pdf',dec);)加密和解密一个简单的字符串时,它会完美地加密和解密。

问题在于编写。解密
dec
输出一个字符串。该字符串必须转换为二进制缓冲区,然后写入文件

现在就像一个魔咒:

var decipher = crypto.createDecipher('aes-256-cbc', encPassword);
var dec = decipher.update(args[0],'hex','binary');                               
dec += decipher.final('binary');       

var buffer = new Buffer(dec, "binary");                                          
fs.writeFileSync('./output.pdf', buffer);  

您可以使用包来加密和解密PDF。它利用了。

解密.update
调用之前,
args[0]
中有什么?因为加密和解密是两个独立的脚本。要解密,我获取第一个(
$crypted
)的输出,并将其用作解密脚本中的命令行参数。如果您尝试将编码和解码步骤放在一个脚本中,并将其仅通过js变量传递,结果相同。空PDF这不是en/解密中的问题,而是写入文件中的问题吗?所以我是对的;)对我来说,它的工作原理是这样的:
fs.writeFileSync('./output.pdf',dec,'binary')
。你帮了大忙,但问题不是二进制问题。这是因为我没有写缓冲区。