有谁知道如何仅设置qpdf加密的用户密码?
我正在使用 Debian 10 (buster) 以及从不稳定版本向后移植到 buster 的qpdf
版本。8.4.2-1
如果我只设置用户密码(例如userpasswd
),并将所有者密码留空(即使用空字符串“”),对于某些文件foo.pdf
,那么加密命令只是
qpdf --encrypt userpasswd "" 256 -- foo.pdf foo.enc.pdf
但是okular
,evince
并且xpdf
全部打开foo.enc.pdf
无需询问密码。如果我对两者都使用密码,则系统会要求我输入密码。 IE
qpdf --encrypt userpasswd userpasswd 256 -- foo.pdf foo.enc.pdf
但我只想对用户密码进行加密。
另外,pdfinfo
报告该文件已加密。
pdfinfo foo.pdf
[...]
Encrypted: yes (print:yes copy:yes change:yes addNotes:yes algorithm:AES-256)
如此简单的事情似乎不太可能有错误,但我不明白我在这里做错了什么。
在 Github 上的 QPDF 问题跟踪器中添加了一个问题: 仅使用用户密码进行加密
答案1
妙语:您真正想要做的很可能是使用空字符串作为用户密码,使用非空字符串作为所有者密码,而不是相反。如果您这样做,人们将能够在不提供密码的情况下打开该文件,但合规的查看者仍将加强文档的安全性。使用所有者密码打开将允许您修改 Adobe Acrobat 等工具中的安全性。请注意,qpdf 在所有情况下都会忽略文件的安全性,并将用户和所有者密码视为相同。
我会尽力解释发生了什么事。
当使用用户密码打开文件时,合规的 PDF 查看器应该尊重文件的安全性,并在使用所有者密码打开文件时允许对文件的完全“管理员”权限。因此,提供用户密码而不提供所有者密码是没有意义的,因为这意味着提供密码比不提供密码更具限制性。
在较旧的 PDF 加密格式中,文件是通过从用户密码派生的加密密钥进行加密的,并且用户密码实际上存储在使用所有者密码加密的文件中。 PDF 查看器首先会尝试查看提供的密码是否是用户密码。如果是这样,他们可以检索密钥并解密文件。如果不是,他们会检查是否是所有者密码。如果是这样,他们可以检索用户密码,并从那里检索密钥。较新的加密格式使用用户密码和所有者密码独立地加密实际密钥,因此不可能使用所有者密码检索用户密码。
由于这种行为,某些应用程序将尝试打开加密密码,尝试使用空字符串作为用户密码,如果失败,它们将提示输入密码。某些软件包(包括 qpdf)会尝试查看所有者密码是否为空,即使用户密码不为空,尽管这实际上没有多大意义。这可以解释您所看到的行为。我相信,如果用户和所有者密码匹配,或者设置了用户密码且所有者密码为空,旧版本的 Adobe Acrobat 将根本不允许管理员访问该文件,因为它们仅在提供的情况下尝试验证所有者密码密码不能作为用户密码。
希望这可以解释您所看到的行为。