4

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

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

我想要的是如何做到这一点的解释,或者我可以阅读的任何代码(理想情况下是 Python、C 或 C++,但任何可读的都可以),这样我就可以理解我的意思正在做。最好是独立代码,而不是通读(例如)gsview 源代码。

4

3 回答 3

1

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

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

我不得不承认我已经有一段时间没有这样做了,我确实记得 PDF 的加密部分绝对是一团糟,因为它几乎在每次修订中都发生了重大变化,需要你处理很多情况来处理所有的PDF。

祝你好运。

于 2008-09-20T10:27:58.143 回答
1

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

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

于 2008-09-08T11:12:56.787 回答
0

xpdf 可能是此类问题的一个很好的参考实现。我之前已经成功地使用它们打开了加密的 pdf。

于 2008-09-21T03:04:42.553 回答