Albin Pump
臭氧发生器
Della Foglia
Wilden 气动隔膜泵
美国astro-med数据采集分析系统
ARCA
KOSO
威德高wedeco臭氧发生器紫外线**器
大湖电伴热系统
curtiss wright核电产品
GreatLakes优势产品总汇
severntrentdenora
GEA板式热交换器
美国chemineer搅拌器
英国mono螺杆泵
美国moyno螺杆泵
瑞士maag齿轮泵造粒系统
美国farris**阀
flowserve阀门
pentair阀门

PDF文件加密仿真

新闻资讯 | 软件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|解决方案|PDF开发篇|PDF应用篇
PDF文件加密仿真
发布日期:2006-4-30 11:39:51 作者:pdfMaker 出处:pdfMaker的专栏
前言:
本文以仿照PDF(也有借鉴XML加密方式)自定义一种非常简单的文件格式为例说明PDF文件的加密方式和过程。
1 几个基本概念
我们学习和讨论PDF文件的加密原理和过程不需要讨论具体的加密算法实现本身,因为所有流行的加密算法早就有所实现,我们需要做的就是直接加以利用。何况介绍和讨论加密算法篇幅巨大,也不应该包含在这短文之中。但是我想下面的几个概念大家都应该明白:
   (下面所有内容包括图例都不是严格的定义,基本上是我本人的理解,如果要知道确切的定义请自己查询相关网站。)

 

 
1.1 对称加密方法
       对称加密方法指的是加密和解密使用同一密钥的方法。PDF文件内容的加密采用RC4和AES的方法。(关于RC4算法和AES算法请自己搜索相关网站)

    例如下面是对称加密的两种简单实现:       非对称加密有一对密钥(KEY1, KEY2),加解密需要用不同的密钥,加密的密钥用KEY1,那么解密的密钥就用KEY2;如果加密的密钥用KEY2,那么解密的密钥就用KEY1。但是一般的使用上来说,这一对密钥中一个称为公钥,作为公开密钥,另外一个称为私有密钥,用来解密。

 
图 1
1.2 非对称加密方法
 
   
图 2
1.3 散列(hash)
   流行的算法有MD5和SHA1,就是不同的任何两组内容通过一组运算得到的结果也不同,我们称为hash数,或者可以叫做数字指纹。
   比如我们常常将系统的登录口令通过MD5运算后存放在口令表里,登录的时候就将用户输入的口令通过MD5运算后和口令表中的相关项对比,如相同就通过认证,否则口令错误。
图 3
2 PDF文件加密的仿真
在讨论真正的PDF文件加密之前先设计一个自己的文件格式,文件格式只包含文本,主要是让大家明白加解密的过程而简化一些次要的属性。 下文中把这种格式的文件称为ZONYPDF,我们把这种称为ZONYPDF的文件格式比作PDF文件格式。
同时假定有一个ZONYPDF reader是作为ZONYPDF文件阅读器来对应于adobe的PDF reader。
要模拟PDF的加密及解密,这个格式的文件必须满足下面的条件:
²        必须能够判断一个文件是否被加密。
²        输入一个口令以后必须能验证其正确与否。
²        输入的口令能够产生加密文件内容的KEY,从而解密整个文件。

 

 
2.1 定义自己的一个文件格式
文件头%ZONYPDF-1.0;文件体包含在body和endbody之间,文件体包含三个属性,一是文本的长度/length,二是文件的打开密钥/userpassword,包含在(和)之间,三是文本本身/content, 也包含在(和)之间。下面是按照我们的定义的一个*简单的未加密的ZONYPDF文件。

 

 
%ZONYPDF-1.0
Body
/length 11
 
/content (Hello world)
endbody
%%EOF

 

 
2.2 将一个自定义的文件加密
我们规定加密的时候只加密数据而不加密其他的符号(事实上PDF也是这么做的)。对于文本的加密采用称为XC1(XC1是为了说明而虚构的一种对称加密算法)的对称加密算法,通过XC1加密的文本的长度和明文的长度一样。
然后加密完文件内容就将加密口令password进行MD5运算后放入/userpassword后的括号内。
用户加密的密钥为123, 加密后就有下面的文件

 

 
%ZONYPDF-1.0
Body
/length 11
/userpassword (#¥%&…)
/content (#¥%&^=+-!@)
endbody
%%EOF

 

 
   当然PDF文件的加密不是直接把用户输入的口令作为加密PDF文件内容的KEY的,而是要通过一定的变换与运算的, 关于如何运算得到这个加密的KEY会在下一次详细说明。同时保存在口令字典里的口令hash也不仅仅是一次MD5运算,会有更多的迭代运算。

 

 
2.3 将加密的文件解密
   首先我们的ZONYPDF reader看到/userpassword后面的长度不为0,就要求用户输入口令,输入口令password1,然后ZONYPDF reader做一次MD5运算然后和/userpassword后的括号里的内容去比对,如果一样那么就说明是正确的口令,则对内容进行解密然后显示。在本例中如果password1为123那么就通过验证并顺利解密。

 

 
2.4 将文件加上权限控制
   那么PDF格式中的权限控制是如何实现的呢?
   给ZONYPDF reader加上一个打印的功能,那么相应地,给ZONYPDF格式中的body部分加上一个打印允许口令/permpassowrd。
   如果打印允许口令/permpassowrd为空则没有打印限制,如果不为空则有打印限制,在打印前需验证口令。口令的生成和打开口令的生成方法一样,由输入口令通过MD5运算放入/permpassword 后的括号内。
  
   那么上面的例子文件就变成。
%ZONYPDF-1.0
Body
/length 11
/userpassword ()
/permpassword ()
/content (Hello world)
endbody
%%EOF

 

 
设置打印权限以后为:
%ZONYPDF-1.0
Body
/length 11
/userpassword ()
/permpassword (%+◎#!…)
/content (Hello world)
endbody
%%EOF
可以看到通过权限设置文件的内容是没有经过加密的,如果是本文中的ZONYPDF格式的话,直接把/permpassword后的内容直接除去就失去了对打印的控制了。而且如果另外一个人也开发了一个ZONYPDF文件阅览器ZONYPDF reader1, 如果它在打开的时候完全忽略权限控制这一属性,那么对它来说任何的限制都是没有用的,因为内容本身是没有加密的。
对于PDF的权限设置其实也是类似的,设置打开口令时才对文件的内容进行加密,而只进行PDF权限设置是相对比较容易去除的,虽然不像我们前面定义的ZONYPDF直接去处/permpassword即可,因为正如上一篇文章所述,PDF有交叉表引用表,如果你删除了一个条目那么就会对交叉引用表中的地址产生影响,从而导致PDF文件结构被破坏并不可用。这也是网上的一些PDF破解程序只能去掉权限控制口令而不能去掉打开口令的缘故。
  对于权限控制这一块,ADOBE公司的相关的文档里也清楚地说明了,如果第三方的PDF阅读器是完全遵循PDF规范的,那么应该判断PDF文件的权限控制这个属性。当然如果第三方的阅读器不尊重所有的PDF规范,那么它是完全可以忽略掉这个权限控制而直接打开的。
因此说PDF的权限设置严格意义上来说是不**的。

 

 
2.5 ZONYPDF文件加密和解密的图例:

 

 
加密:
图 4

 

 
解密:
图 5
3 总结
        通过对一个*小规模的自定义文件加密过程的分析,可以明白PDF文件加密大体过程,之所以给出这个自定义文件格式的加密过程,为的是让大家明白其实所有文件格式的加密方式都是有相通之处的,那就是用对称加密来加密文件内容,用hash数来保存加密文件内容的key.
       如果你只要明白PDF文件的大体流程,那么这则短文对你的理解应该就可可以了,如果你需要了解PDF文件加密过程的细节, 比如说你要具体实现自己对PDF的加密或者是解密,那么希望你能去看PDF Reference1.6。
/userpassword ()
发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 0 条评论 评分人数: 0 平均分: 0
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
iTextSharp与True
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
用C#制作PDF文件全攻略(3035)
一个简单的PDF文件结构的分析(2860)
Word转换PDF格式的C#或(2511)
在Web应用中动态创建PDF文(2350)
PDF文件加密仿真(2238)
整合PDF和Java技术(1919)
pdfMaker文章:PDF加(1868)
浅谈PDFlib中文输出(一)(1338)
PDF文档生成利器 — PDF(1288)
浅谈PDFlib中文输出(二)(1199)
热门评论
PDFlib开发:创建超文本元(2)
用FPDF为你的PHP打造PD(0)
用FPDF为你的PHP打造PD(0)
使用iText操作pdf文件(0)
asp.net导出pdf(用i(0)
转换Word为Pdf时嵌入字体(0)
使用正则表达式计算PDF文档的(0)
iText类库及应用(0)
使用easyPDF JavaS(0)
用JBuilder2005开发(0)
关于我们 | 网站地图 | 友情链接 | 联系我们 |客户服务 | 法律声明

北京中科希望软件股份有限公司版权所有
Copyright © 2006 京ICP备06032405号
 
江苏弗里森流体工程技术有限公司    电话:销售电话18921211009 销售支持13093065160 产品查询13771284315   传真:051086023577
地址:江阴市澄江中路5号东都大厦707室    邮编:214400    苏ICP备09022593号-1
主营产品:帕斯菲达润滑油冷却水泵PROCONBJC电极DOSATRON比例泵奥宗尼亚臭氧发生器臭氧发生器mil's mv99s润滑油PTFE纳米发生器VGE紫外线**器

苏公网安备 32028102000821号