使用 pypdf 检查 pdf 文档的哪些页面已加密

问题描述 投票:0回答:1

我想知道 pdf 文档的哪些页面被加密。我想知道这一点,因为有些 pdf 文档被合并,其中一个文档进行了加密,而另一个文档则没有。所以这意味着某些页面没有加密。在这里,我尝试使用

doc_not_encrypted.pdf
doc_is_encrypted.pdf
:

创建可重现的代码
import pypdf
File = open("doc_not_encrypted.pdf", "rb")
reader = pypdf.PdfReader(File)

if reader.is_encrypted:
    print("This document is encrypted!")
else:
    print("This document is not encrypted!")

This document is not encrypted!

import pypdf
File = open("doc_is_encrypted.pdf", "rb")
reader = pypdf.PdfReader(File)

if reader.is_encrypted:
    print("This document is encrypted!")
else:
    print("This document is not encrypted!")

This document is encrypted!

现在假设文档已合并:

import pypdf
File = open("doc_merged.pdf", "rb")
reader = pypdf.PdfReader(File)

if reader.is_encrypted:
    print("This document is encrypted!")
else:
    print("This document is not encrypted!")

This document is encrypted!

当然它是加密的,但我想知道是否有人知道是否可以使用

pypdf
来确定实际加密的页面?

在这里您可以获取文件以使问题重现。

python pdf encryption pypdf
1个回答
0
投票

合并 PDF 文件时,页面内容将写入新文件。

因此,新的 PDF 容器文件为所有新页面提供了任何安全性。

根据库的不同,它可能会继承用于设置新文件特征的基础文件设置。

因此,新文件要么全部解除限制,要么是通用安全级别,而不知道任何源的设置。

在这种情况下,合并文件将被关闭,并在用于打开文件之前在所有其他对象上最后设置加密。

25 0 obj
<< /Filter /Standard /V 4 /R 4 /Length 128 /CF << /StdCF << /AuthEvent /DocOpen
/CFM /AESV2 /Length 16 >> >> /StmF /StdCF /StrF /StdCF /O <2568fb1816e3ac4a4660dd35e9436a729a68a2ac204243ff2e338ece412a7342>
/U <c686fdb45642751d551f73a81554ab1100000000000000000000000000000000> /P -3392
>>
endobj

该文件具有指向该加密对象的指针(

/Encrypt 25 0 R
)作为最终的写入任务。

trailer
<< /Size 26 /Root 17 0 R /Encrypt 25 0 R /Info 24 0 R /ID [ <241033727543d09e56c911229e7033f1>
<241033727543d09e56c911229e7033f1> ] >>
startxref
27556
%%EOF
© www.soinside.com 2019 - 2024. All rights reserved.