关于C#:如何使用所有者密码而不使用用户密码解密PDF?

关于C#:如何使用所有者密码而不使用用户密码解密PDF?

How does one decrypt a PDF with an owner password, but no user password?

尽管Adobe可以提供PDF规范,但它并不是最容易阅读的文档。 PDF允许对文档进行加密,因此需要用户密码和/或所有者密码才能对文档执行各种操作(显示,打印等)。常见的用途是锁定PDF,以便最终用户无需输入任何密码即可阅读它,但是执行其他任何操作都需要输入密码。

我正在尝试解析以这种方式锁定的PDF(以获得与在任何阅读器中打开它们相同的特权)。使用空字符串作为用户密码不起作用,但是(规范的3.5.2节)似乎必须有一个用户密码才能为管理员密码创建哈希。

我想要的是对如何执行此操作的解释,或者是我可以读取的任何代码(理想情况下为Python,C或C,但是任何可读的代码都可以这样做),以便我可以理解自己的\\注定要做。最好是独立代码,而不是通读(例如)gsview源代码。


如果我没记错的话,有32个固定的填充字符串(?)字节可应用于任何密码。在计算加密密钥开始时,通过截断或添加一些填充字节,所有密码都必须为32个字节。

如果未设置用户密码,则只需填充字符串的所有32个字节,即使用32个填充字节作为计算加密密钥的起点。

我必须承认这已经有一段时间了,我确实记得PDF的加密部分绝对是一团糟,因为在几乎每个修订版中它都发生了显着变化,需要您应对很多处理所有PDF的案例。

祝你好运。


用于查看加密的PDF的GSview插件在这里。

如果这对您有用,则您可以查看源。


对于这种问题,

xpdf可能是一个很好的参考实现。我以前已经成功地使用它们来打开加密的pdf。


推荐阅读