说到PDF文件的加密与解密,不得不说与pdf 想关的两个软件:Adobe Acrobat 和Adobe Reader,前者是制作PDF文件的软件当然也就可以对其进得加密了,后者是一个pdf的阅读软件,但并不能解密,除非你知道加密口令:mrgreen:
PDF加密有两个口令即:Owner(to set the pdf document Permission or change the permission) Password和User Password,在本文中翻译为主(权限)口令和用户口令,我觉得权限口令更好,因此就称作权限口令。
文件加密后会生成一个新的对象,encryption dictionaries object,本文中以加密字典对象来说明。
其中加密字典对象中的项称为加密字典对象项。
一、 几个常见的PDF安全问题
最近经常有人问到几个问题,是关于PDF加解密的,如果你对PDF规范比较熟悉,那么有可能会觉得这这几个问题很简单甚至有些傻。但几乎每个人都会有这么一个阶段,总是从无知到有知,再到无知,…,一个个轮回。
如果你需要对PDF加密解密有更深入地了解和学习,那么可以继续关注系列文章。当然这些文章的大部分内容你都可以从PDF规范里面找到,在这里,我只是以我个人的理解帮助大家可以更快地理解和应用。
1)、问:PDF有那些加密算法?
PDF文件采用的加密算法目前在用的有两种,RC4和AES。
PDF的早期版本是通过RC4加密算法对内容进行加密的,加密的长度为(40-128位)而从PDF1.6起,引入了AES加密算法(128位),对应的阅读器有ACROBAT7.0 。因此说PDF中的加密算法是固定的,没有其他第三种加密算法。关于RC4和AES,你可以到相关网站找到答案,见参考资料。
2)、问:为什么我的PDF已经设置了权限设置,并且屏蔽了打印,但是为什么别人可以很容易地破解?
答::打个不恰当的比方,这只是“防君子而非小人”。但是很多人都对PDF的权限设置产生误解。认为作了权限设置就已经对文件内容进行了加密而一定要输入口令,其实不然。 PDF文件加密的时候,你输入一个打开口令,比如说是 其实不是直接由你输入的口令作为PDF加密内容的密钥的,还需要有一个转换过程才得到加密密钥。怎么才能判断你输入的口令是否正确呢?
那是因为在加密PDF文件的时候会在PDF文件中放入一个由打开口令运算得到的HASH序列,当你输入口令的时候就需要对你输入的口令作一系列的运算而得到另一个HASH序列,如果两个HASH序列一致,那么就可以根据这个HASH序列和你输入的口令生成解密密钥开始解密,否则提示口令错误。
3)、问:什么是ACROBAT中自定义的Security Handler?
答:PDF允许自定义Security handler,如果大家访问过PDF电子书网站,那一定会明白这是怎么一回事。一般的PDF电子书网站都会要求你下载一个PLUGIN(acrobat 或adobe pdf reader的插件),在这个PLUGIN里就会用到自定义的Security Handler。
那这些新的PDF Security Handler是否使用了新的加密方法呢?当然不是,对PDF内容的加密还是使用RC4或AES,只是加密密钥的生成方法不同。
- 1)打开PDF文件。
- 2)选择菜单: File->Document Properties。
- 3)选择Security选项卡。
- 4)在 Security Method一栏中选择Password Security,点change Settings…按钮,如下图:
- 5)出现下面加密项设置对话框:
- 6)首先选择兼容性,共有acrobat3.0 acrobat5.0,acrobat6.0和acrobat7.0,默认为acrobat5.0,即被实现PDF1.4规范的软件支持。(本文我们就以此为例)
- 7)分别设置打开口令和权限口令,注意两个口令不能一样,我们在这个例子里面将分别输入和,当然你在实际应用中必须使用复杂的口令。
- 8)设置你准备给该PDF文档读者授予的操作权限。
- 9)按OK按钮后确认打开口令和权限口令,按OK。
- 10)文档被加密。
2.2 加密后PDF文件发生了什么变化?
如果想知道PDF加密后发生了什么变化,那么最好的方法是找一个PDF文件,然后对它进行加密,保存后再用Ultra Edit打开,这样所有的变化都会一目了然。
将我文章最后的PDF文件下载,如果你有ACROBAT的话,那么按照我上面的流程作一加密,加密保存后我们会发现文件发生了变化。
通过观察你会看到PDF文件尾部(trailer)发生了变化,加密前我们看到文件尾为:
trailer
加密后文件尾变为:
trailer
明显地,红色部分是加密后增加的,说明加密字典对象的对象号为5.
我们可以很容易找到以下的加密字典对象:
5 0 obj endobj
其实这些加密字典对象项都是通过我们图形界面输入项生成的,那么这些项都表达什么意思呢?
下面的内容我们可以从PDF规范1.6中找到:
/Length 密钥的长度
/Filter 生成密钥的方法就是前面说的security handler
/O 是由用户口令和权限口令得到的,用来生成密钥和验证输入的权限口令
/P 访问权限的标志
/R 标准加密的(standard security handler)的版本
/U由用户口令生成,用来验证输入的用户口令或权限口令,是否要提醒用户输入密码
/V 可选,用来指明加密的算法。
对加密有了一定的了解,对解密也有一定帮助,当然你也可以直接通过软件来解密了,但都不是万能的,过复杂点的密码就很难解开了。