2024年6月3日发(作者:)

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加密解密流程详解

1

加密字典对象一般有下面的条目:

/Length 密钥的长度

/Filter 生成密钥的方法,就是前面说的security handler

/O 是由用户口令和权限口令得到的,用来生成密钥和验证输入的权限口令

/P 访问权限的标志

/R 标准加密的(standard security handler)的版本

/U由用户口令生成,用来验证输入的用户口令或权限口令,是否要提醒用户输

入密码

/V 可选,用来指明加密的算法。

一般来说这上面的条目是必须的,其它条目具体见PDF规范。这上面的加密

字典条目中除了条目O和U之外其它的都可以直接生成。那么接下来我们就来

看这两个条目,全局加密密钥,和对象加密密钥的生成过程。

如果你去看PDF规范,在有的步骤会有点迷茫的,相信下面的详细介绍对大

家会有所帮助,如果你要实现自己的加密程序,也将给你一个指引。

2.1 生成加密字典和加密密钥

2.1.1 生成条目O

算法3.3:

1.

补充或截取权限口令字符串为32个字节。如果输入的口令大于32个字节,

那么只保留前32个字节,如果少于32个字节,那么就按下面的字符串补上

所缺少的字节数:

<0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41,

0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08,

0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80,

0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a>

如果没有权限(主)口令,那么就用用户口令替代。

2.

初始化MD5函数并将步骤1产生的结果输入MD5函数。

2