解密具有内容的加密PDF后,解密的结果为空



使用node.js crypto库,我像这样对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);
});

i然后服用 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);  

您可以使用node-qpdf软件包对PDF进行加密和解密。它使用QPDF。

最新更新