如何解密一个有所有者密码但没有用户密码的PDF文件?
虽然Adobe提供了PDF规范,但这份文档并不是特别容易理解。PDF文件可以加密,这样就需要用户密码和/或拥有者密码才能对文件进行各种操作(比如查看、打印等)。一种常见的用法是锁定PDF文件,让最终用户可以阅读,但如果想进行其他操作就需要输入密码。
我想解析这些以这种方式锁定的PDF文件(以获得与在任何阅读器中打开它们时相同的权限)。使用空字符串作为用户密码是行不通的,但根据规范的第3.5.2节,创建管理员密码的哈希值时必须有一个用户密码。
我希望能得到一个解释,或者一些我可以阅读的代码(最好是Python、C或C++,但任何可读的代码都可以),这样我就能理解我该怎么做。最好是独立的代码,而不是像阅读(例如)gsview的源代码那样。
3 个回答
0
xpdf 可能是解决这类问题的一个不错的参考工具。我之前成功用它打开过加密的 PDF 文件。
1
有一个GSview的插件,可以用来查看加密的PDF文件,点击这里可以找到。
如果这个插件对你有用,你可能还可以查看它的源代码。
1
如果我没记错的话,密码在处理时需要加上一个固定的填充字符串,这个字符串是32个字节。所有的密码在计算加密密钥时都需要变成32个字节,要么是把密码截短,要么是加上这些填充字节。
如果用户没有设置密码,那你就得用这32个字节的填充字符串,直接用这32个字节作为计算加密密钥的起点。
我得承认我已经有一段时间没做这个了,我记得PDF的加密部分非常复杂,因为在几乎每个版本中都有很大的变化,这就需要你处理很多不同的情况来应对所有的PDF。
祝你好运。