Node.js 解密包含内容的加密pdf后,解密结果为空
使用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
//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')
。你帮了大忙,但问题不是二进制问题。这是因为我没有写缓冲区。