0 几个重要概念
全局加密密钥,简称为全局密钥,该全局密钥由加密字典对象和你输入的口令生成,用来生成对象加密密钥。
对象加密密钥,简称为对象密钥,是用来实际加密PDF文件内容的密钥,不同于上篇PDF加密仿真里的全部的对象共用一个密钥不同,PDF文件中每个对象的加密密钥都不一样。
User Password 用户口令。
Owner password 权限口令。
1 PDF文件的加密流程
上一篇文章大致介绍了关于ACROBAT对PDF加密操作和加密后生成的PDF文件中的加密字典对象。同时我们提出了下面的四个问题:
1. 文件的内容是如何被加密的?
2. 加密密钥是如何生成的?
3. 加密字典中的每一项是如何生成的?
4. 加密字典和加密密钥的关系?
第一个问题是我们的最终目的,本文要最终要解决的就是这个问题。而第2,3,4个问题作为第1个问题的分解,在下文中有个清晰地解答。
下面是一个PDF文件加密的大致过程:
1. 选择PDF兼容版本和输入用户口令,权限口令。
2. 根据输入生成加密字典对象。
3. 由输入和加密字典对象生成全局密钥。
4. 由全局密钥生成对象加密密钥。
5. 用对象加密密钥加密对象内容。
2 PDF加密解密流程详解
加密字典对象一般有下面的条目:
/Length 密钥的长度
/Filter 生成密钥的方法,就是前面说的security handler
/O 是由用户口令和权限口令得到的,用来生成密钥和验证输入的权限口令
/P 访问权限的标志
/R 标准加密的(standard security handler)的版本
/U由用户口令生成,用来验证输入的用户口令或权限口令,是否要提醒用户输入密码
/V 可选,用来指明加密的算法。
一般来说这上面的条目是必须的,其它条目具体见PDF规范。这上面的加密字典条目中除了条目O和U之外其它的都可以直接生成。那么接下来我们就来看这两个条目,全局加密密钥,和对象加密密钥的生成过程。
如果你去看PDF规范,在有的步骤会有点迷茫的,相信下面的详细介绍对大家会有所帮助,如果你要实现自己的加密程序,也将给你一个指引。