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
发布评论