PDF加密判断

本秂侑毒 提交于 2019-11-30 00:01:47

以下是最近通过对PDF官方文档的研究,总结的判断方式,如果有问题,请指出,谢谢

       PDF文件的加密分两种,一种是所有者加密,一种是用户加密,所有者也就是文件创建者,可以限制用户对文件的操作权限,包括打印,复制等(通过福昕阅读器文档属性中的安全可以看到有哪些权限,已及是否做了限制)。当有权限被限制时,必然会有所有者密码,但是用户密码不一定有,当用户密码存在时,用户需要输入密码才能打开文档,否则可以打开文档,但是部分权限受限(和所有者分配的权限有关)。

      以上是加密的情况,现在说一下加密的判断。

      加密判断比较简单,可以将pdf文件通过notepad++或linux下通过vi打开,你可以看到文档末尾有如下的字符串,如果其中包含Encrypt字样,那么该文件一定是加密的。

trailer
<<
/Size 55793
/Length 129
/Filter /FlateDecode
/DecodeParms <<
/Columns 4
/Predictor 12
>>
/W [1 2 1]
/Type /XRef
/Index [56594 797]
/Root 1 0 R
/ID [<A0539604D8A9FA438335F6C1F201C816> <EE46AC587EA8FE44A9DF9F376C71F9CD>]
/Info 8 0 R
/Encrypt 55792 0 R
>>

但是以上判断的加密不能说明文件打开就需要输入密码,现在可以看下加密流的结构,通过Encrypt后面的数字便可以找到对应的加密流,加密流以obj开始,endobj结束

55792 0 obj
<<
/Filter /Standard
/V 1
/R 3
/Length 40
/P -28
/O <63981688733872DEC7983D3C6EB1F412CC535EA2DAA2AB171E2BBC4E36B21887>
/U <215B43C1F2A2BA5A155EB668678AAE3428BF4E5E4E758A4164004E56FFFA0108>
>>
endobj

 其中V指明加密及解密文件时使用的算法:

0:一种没有文档说明且不再受支持的算法,强烈反对使用该算法。
1:算法3.1,密钥长度为40位
2:算法3.1,但允许加密密钥长度大于40位 

3:一种未发表的算法,容许加密密钥的长度由40位至128位不等;参见附录H中的实现说明22.

4:安全处理程序使用CF、StmF和StrF条目指定的规则定义文档中加密和解密的使用。如果省略此条目,则默认值为0,但强烈建议值为1或更大

R表示标准口令安全方法的修订版本号。V值小于2时,R为2;V为2或者3时,R为3;V为4时,R为4.

Length 加密密钥的长度,以位为单位。该值必须是8的倍数,范围在40到128之间。默认值:40

P表示用户所拥有的权限(PDF加密中没有任何内在的东西强制执行加密字典中指定的文档权限),32位,每位表示这某种权限的设置。

1-2 : 0.
3 (Revision 2) 打印文档
(Revision 3 or greater) 打印文档(通过 12位的设置决定是否使用高清晰度).
4通过 6, 9,  11位操作修改文档的内容
5 (Revision 2)复制或以其他方式从文档,包括提取文本和图形(支持残疾用户访问或用于其他目的)(Revision 3 or greater)复制或以其他方式提取文本和图形从文档中按操作而不是按位控制的操作
6 添加或修改文本注释,填写交互式表单字段,如果还设置了第4位,则创建或修改交互式表单字段(包括签名字段)。
7–8 1.
9 (Revision 3 or greater) 填写现有的交互式表单字段(包括签名字段)
10 (Revision 3 or greater)提取文本和图形(支持残疾用户访问或用于其他目的)。
11 (Revision 3 or greater)组装文档(插入、旋转或删除页面并创建书签或缩略图)
12 (Revision 3 or greater) 在设置了第三位和该位时,打印将被限制为外观的低级别表示,可能会降低质量。
13–32 (Revision 3 or greater)  1

O给予所有者密码的字符串,用于计算所有者密码

U基于用户密码的字符串,用于计算用户密码,当解密出来的用户密码位空时,pdf文件打开时,不需要输入密码便可以浏览文件。但权限可能受限。

标准安全处理程序使用算法3.6和3.7来确定提供的密码字符串是正确的用户密码还是所有者密码。还请注意,算法3.6可用于确定文档的用户密码是否是空字符串,因此是否在打开文档时禁止提示输入密码。

使用提供的密码字符串执行算法3.4(修订2)或算法3.5(修订3或更高)的所有步骤,但不包括最后一步。
如果步骤1的结果等于加密字典的U条目的值(在版本3或更大的情况下与前16个字节进行比较),则提供的密码是正确的用户密码。
在步骤1中获得的密钥(即在算法3.4或3.5的第一步中)可以使用第119页的算法3.1解密文档。

以上是从文档中摘要的一些信息,可以看到想要知道判断文件是否打开需要输入密码,需要多U中的字符串进行解密,如果为空则没加密,没有某一位明确标识文件是否可以直接打开不需密码。

 

以上对流的介绍并不详细,只介绍了一些我认为对加密判断比较重要的字段,其它的有需要可以参考官方文档PDF Reference 1.7。

参考博客:

https://blog.csdn.net/jinshixie/article/details/51095771

https://blog.csdn.net/involute/article/details/7638209

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!