2008-09-08 340 views
2

尽管可从Adobe获得PDF specification,但它并非完全是通读最简单的文档。 PDF允许对文档进行加密,以便使用用户密码和/或所有者密码对文档进行各种操作(显示,打印等)。常用的方法是锁定PDF,以便最终用户无需输入任何密码即可阅读,但需要输入密码才能执行其他任何操作。如何使用所有者密码解密PDF,但没有用户密码?

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

我想要的是解释如何做到这一点,或者我可以阅读的任何代码(理想情况下是Python,C或C++,但任何可读的都可以)会这样做,以便我能理解我我打算这么做。独立代码,而不是通读(例如)gsview源代码是最好的。

+0

另外,只需在查看器中打开它,当我创建这样一个PDF时,它会打开限制条件,但似乎无法输入我的所有者密码以取消限制。似乎没用。 – Marius 2018-02-28 17:52:56

回答

1

用于查看加密PDF的GSview插件是here

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

1

如果我没有记错的话,有一个32(?)字节的固定填充字符串适用于任何密码。所有密码在开始计算加密密钥时需要为32个字节,可以通过截断或添加其中一些填充字节来实现。

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

我不得不承认它已经有一段时间,因为我做这个,我不记得PDF加密部分是一个绝对的混乱,因为它得到了几乎每一个版本显著改变,需要你应付很多的案件来处理所有的PDF。

祝你好运。

0

对于这类问题,xpdf可能是一个很好的参考实现。我已经成功地使用它们来打开加密的pdf。