破解加密PDF文件 - 格式转换技术文档 - PDF之家 - Powered By SupeSite

破解加密PDF文件

一般的口令验证
我想很多人在学习某个技术或者其它之前总会想想如果换作自己来设计会怎么办,比如说PDF文件的解密,我就会想,文件内容是经过加密的,那么必须要有一个密钥才能解密文件的内容。而这一定和要求输入的口令是有关。那么这之间有什么关系呢?
当然有很多种可能,在很久以前,一些系统竟然在后台用明文保存用户口令和口令,这样用户在登录系统的时候就直接比较用户名密码是否一致,当然这些用户名和密码全部掌握在管理员的手中;到我们比较注重系统安全的时候,用口令通过HASH函数生成HASH序列保存在数据库里,这样就比较安全,因为HASH函数是单向的,没有输入的口令的话只有用暴力破解的方法了。如果你的口令设置的比较简单也是很容易被破解的。因此现在一些对安全性比较高的网站都会要求你不要将口令设置的过于简单。
    那么解密PDF的时候口令是如何来验证的呢?
    是不是由我们的口令生成的HASH序列保存在PDF文件里,然后在打开的时候由你输入的口令再生成一个HASH序列,两者比对,同则由你输入的口令会同PDF文件中的其它内容生成密钥,然后解密?这只是我们的设想,那么PDF文件解密是不是真的这样做的呢?


1.jpg


下面我们来寻找问题的答案。


2 PDF文件口令验证
在上几篇文章中我们也知道了PDF有两组口令,一为Owner Password, 另外一组称为User Password,因为Owner Password是用来控制权限的,在文章中我们把它称为权限口令;而User Password是用来打开文件的,称为打开口令。
如果一个文件同时设置了打开口令和权限口令,那么在打开PDF文件的时候只要输入任何一个口令就可以打开该加密的PDF文件了。
而当我们输入口令的时候,一般处理PDF的软件会先判断是否权限口令,如果是,那么开放所有的操作权限,用户就可以没有任何限制地使用该PDF文件;如果不是权限口令,那么会判断输入的口令是否为打开口令,如果验证成功,那么PDF文件就解密,就可以看到文件的内容,但是此时文件的其它操作是受限制的。
算法3.6和算法3.7分别描述了对用户口令和权限口令的验证。如果你尚未读过前一篇文章,那么如果你感兴趣的话可以去看一看,然后再回过来看本文。
2.1算法 3.6 验证用户口令
1利用用户提供的口令执行算法3.4(R2)或算法3.5(R3或更高)。
2 如果步骤1的输出和PDF文件中加密字典中的U值一致(R2),或者前16位一致(R3或更高),因为版本3或更高的情况后十六位是任意补足的。那么该输入的用户口令正确,并且可以按照算法3.1对文件内容进行解密。

2.2 算法3.7 验证主口令
1.    根据算法3.3的1到4步,由提供的口令串计算得到一个密钥。
2.    (仅版本2)用步骤1得到的密钥解密加密字典中的O条目值。
((版本3或更高)做20次:用前一次的输出作为下一次的输入进行解密;密钥是由第1步产生的原始密钥的单个字节依次和循环数和进行XOR(异或)运算得到的(循环数从19到0)。
下面为该过程的伪码:

Test[32] = 加密字典对象中条目O的32位字符串值;
temKey = Test[32];
keyLength = length/8;
for (i = 19; i >= 0; --i)
{
for (j = 0; j < keyLength; ++j)
{
     tmpKey[j] = fileKey[j] ^ i;
}
rc4InitKey(tmpKey, keyLength, fState);
fx = fy = 0;
for (j = 0; j < 32; ++j)
{
     test[j] = rc4DecryptByte(fState, &fx, &fy, test[j]);
}
}
3 步骤2产生的结果假定为打开口令(user password),用算法6来验证该用户口令。如果正确,那么提供的口令就为权限口令(owner password)。


3 可能的破解方法
对加密的PDF文件进行破解我想是很多人最感兴趣的,那么在此也来讨论一下对口令加密的PDF文件是否可以被破解?有那些方法可以来破解口令加密的PDF文件?
       对于第一个问题的答案是显而易见的,没有那种加密方法是绝对安全的,绝对不能被破解的,我们很多时候所说的不能破解是指破解的时间相当长,长到对你破解的内容没有意义的时候。下面我们来看看有哪几种常规的破解加密PDF文件的方法。
3.1 常规暴力破解
这是对任何需要口令验证或解密的系统或加密文件都有效的方法,这个方法最简单,就是通过穷举计算HASH序列来比对。当该口令或密码设置的非常简单的时候,该方法是有非常有效的。
破解过程按照算法3.6和算法3.7来验证打开口令和权限口令。

3.2 口令表
口令表主要是在暴力破解的基础上改进的,主要是应为一些人设置口令的时候用了一些比较容易记忆的内容,比如电话号码,比如生日,比如电子邮件等。因此说建立一些常见的口令表或者一些规则,那么匹配的速度就可能会更快。
破解过程同样要按照算法3.6和算法3.7来验证打开口令和权限口令。


3.3 知道部分内容的解密
对于那些是由机器随机生成,复杂,很长的口令(最长可达32字节),那么就不太有可能通过上述两种方法来进行破解。或者说破解的代价相当巨大,依照现在的计算机可能要算成千上万年。
如果你知道文件的部分内容,那么你通过猜测文件的密钥。比如说你知道文件的标题是”abc”, 那么你可以通过你猜测的加密密钥来对该明文标题”abc”来进行加密,然后比对该密文和PDF文件中的密文是否一致,如果一致,那么这就是密钥,从而不需要经过常规的验证权限口令和打开口令就可以对文件进行解密。如图:


2.jpg



图2 知道部分明文的破解

在这种情况下,如果密钥长度比较短的的话,那将很容易破解该文件。

3.4 PDF加密算法的改进
PDF中内容的加密算法从PDF1.6开始支持AES加密算法,块大小为16字节的CBC模式,这种算法的特点是生成一个随机字符串作为初始加密向量,后面的内容的加密都要和这个初时向量有关,因此说你即使知道了文件的部分内容,也不能通过方法3来破解PDF文件密钥了。


3.5 对于只有权限口令的PDF文件解密
只设置了权限口令的PDF文件的内容也是加密的,只是这个时候加密的密钥是可以通过加密字典来计算得到的,因此说解密的时候并不需要你输入任何密码。具体的密码生成过程见上一篇文章。
4 小结
本文详细地介绍了验证PDF口令的过程,同时也简单地介绍破解加密PDF文件可能的方法,当然讨论破解方法的目的并不是希望你去做一个软件,通过你的软件去非法破解一些加密了的PDF文件。只是希望能够使你了解整个PDF文件的解密过程。同时通过对PDF文件解密过程的介绍,也可以举一反三地掌握一些其它格式文件加密的大概过程和方法。当然如果你真的做了一个软件可以去掉打开口令的话,那么你也许可以帮帮类似于”浩然可见”等朋友,忘记了自己设定的口令而打不开PDF文件。
接下去的文章我想和大家一起讨论的PDF文件中的公钥加密(证书加密)和签名,感兴趣的朋友可以继续关注。
我也来说两句 查看全部回复

最新回复

  • admin (2007-4-16 13:51:20)

    0 几个关键词的说明
    PDF加密有两个口令即:Owner(to set the pdf document Permission or change the permission) Password和User Password,在本文中翻译为主(权限)口令和用户口令,我觉得权限口令更好,因此就称作权限口令。
    文件加密后会生成一个新的对象,encryption dictionaries Object,本文中以加密字典对象来说明。
    其中加密字典对象中的项称为加密字典对象项。
    另外文中能以中文来说明的尽量以中文来说明,如果一些关键的英文词没有很好的中文对应词我们还是保留原来的英文说法。
    1 几个常见的PDF安全问题
    最近经常有人问到几个问题,是关于PDF加解密的,如果你对PDF规范比较熟悉,那么有可能会觉得这这几个问题很简单甚至有些傻。但几乎每个人都会有这么一个阶段,总是从无知到有知,再到无知,…,一个个轮回。
    在文章的最开始我把问题给提出来,然后作一个简单的回答,如果觉得这有助于你对PDF加解密的认识,那我会非常开心的
    如果你需要对PDF加密解密有更深入地了解和学习,那么可以继续关注系列文章。当然这些文章的大部分内容你都可以从PDF规范里面找到,在这里,我只是以我个人的理解帮助大家可以更快地理解和应用。

    ²        问:PDF有那些加密算法?
    PDF文件采用的加密算法目前在用的有两种,RC4和AES。
    PDF的早期版本是通过RC4加密算法对内容进行加密的,加密的长度为(40-128位)而从PDF1.6起,引入了AES加密算法(128位),对应的阅读器有ACROBAT7.0 。因此说PDF中的加密算法是固定的,没有其他第三种加密算法。关于RC4和AES,你可以到相关网站找到答案,见参考资料。

    ²        问:为什么我的PDF已经设置了权限设置,并且屏蔽了打印,但是为什么别人可以很容易地破解?
    答::打个不恰当的比方,这只是“防君子而非小人”。但是很多人都对PDF的权限设置产生误解。认为作了权限设置就已经对文件内容进行了加密而一定要输入口令,其实不然,典型的例子有:http://www.kenwong.cn/post/how-t ... f-restrictions.html。GMAIL这样做确实是一个非常大的BUG,这是明显违反PDF规范的,在这一点上GMAIL做的太不严谨,幸好它能及时作修正。
    PDF中的权限设置只是一串字符而已,用这些字符的某些位来表示PDF是否允许某个操作或者禁止某个操作,而只有权限口令没有打开口令的情况下文件虽然是加密了,但是可以通过加密字典对象和PDF生成加密密钥的规则来得到加密密钥(下一篇文章会详细解释),从而对文件内容进行解密,如果你解密后把它另存为一个新的文件,那么就可以修改或去除这个字符串和相关的信息,那么PDF文件权限就不受限制了。
    如果是要确保文件内容加密,那只有设置打开口令。

    ²        问:为什么我设置了打开口令,还被别人破解?
    答:如果你设置了打开口令,那么这个时候文件内容是加密的。要打开这类文件是必须要得到加密口令的,这个时候如果还被破解的话,那很有可能是因为你设置的打开口令太过于简单,长度比较小的缘故,这样的情况是可以通过穷举来破解的,当然也可以使用口令字典来破解。
    那是通过怎样来破解的呢?
    PDF文件加密的时候,你输入一个打开口令,比如说是123456, 其实不是直接由你输入的口令作为PDF加密内容的密钥的,还需要有一个转换过程才得到加密密钥。
    而怎么才能判断你输入的口令是否正确呢?
    那是因为在加密PDF文件的时候会在PDF文件中放入一个由打开口令运算得到的HASH序列,当你输入口令的时候就需要对你输入的口令作一系列的运算而得到另一个HASH序列,如果两个HASH序列一致,那么就可以根据这个HASH序列和你输入的口令生成解密密钥开始解密,否则提示口令错误。这在我的上一篇文章《PDF加密仿真》中可以得到答案。

    ²        问:什么是ACROBAT中自定义的Security Handler?
    答:PDF允许自定义Security handler,如果大家访问过PDF电子书网站,那一定会明白这是怎么一回事。一般的PDF电子书网站都会要求你下载一个PLUGIN(acrobat 或adobe pdf reader的插件),在这个PLUGIN里就会用到自定义的Security Handler。
    那这些新的PDF Security Handler是否使用了新的加密方法呢?当然不是,对PDF内容的加密还是使用RC4或AES,只是加密密钥的生成方法不同。
    如果大家对这个感兴趣,我也将给大家作一个比较全面的介绍。

    2 一个PDF文件加密
    2.1 用ACROBAT7.0英文版给PDF文件口令加密的过程:
    1)        打开PDF文件。
    2)        选择菜单: File->Document Properties。
    3)        选择Security选项卡。
    4)        在 Security Method一栏中选择Password Security,点change Settings…按钮,如下图:


    1.jpg



    5)        出现下面加密项设置对话框:



    2.jpg



    6)        首先选择兼容性,共有acrobat3.0, acrobat5.0,acrobat6.0和acrobat7.0,默认为acrobat5.0,即被实现PDF1.4规范的软件支持。(本文我们就以此为例)
    7)        分别设置打开口令和权限口令,注意两个口令不能一样,我们在这个例子里面将分别输入111111和222222,当然你在实际应用中必须使用复杂的口令。
    8)        设置你准备给该PDF文档读者授予的操作权限。
    9)        按OK按钮后确认打开口令和权限口令,按OK。
    10)     文档被加密。

    2.2 加密后PDF文件发生了什么变化?
      如果想知道PDF加密后发生了什么变化,那么最好的方法是找一个PDF文件,然后对它进行加密,保存后再用Ultra Edit打开,这样所有的变化都会一目了然。
           将我文章最后的PDF文件下载,如果你有ACROBAT的话,那么按照我上面的流程作一加密,加密保存后我们会发现文件发生了变化。
    通过观察你会看到PDF文件尾部(trailer)发生了变化,加密前我们看到文件尾为:
    trailer
    << /Size 16
    /Root 1 0 R
    /Info 2 0 R
    /ID [<14147840093798E8EDC491FC1B2F19A7><14147840093798E8EDC491FC1B2F19A7>]
    >>
    加密后文件尾变为:
    trailer
    <</Size 18
    /Prev 10226
    /Root 6 0 R
    /Encrypt 5 0 R
    /Info 3 0 R
    /ID[<14147840093798E8EDC491FC1B2F19A7><3F95D9F08175974E8A55871FCBB2F983>]>>
    明显地,红色部分是加密后增加的,说明加密字典对象的对象号为5.
    我们可以很容易找到以下的加密字典对象:
    5 0 obj
    <</Length 128
    /Filter/Standard
    /O(_??颖?>S8+E?v?-zE{\r?<??
    /P -3392
    /R 3
    /U(v???a垭驽h?                )
    /V 2>>
    endobj
    其实这些加密字典对象项都是通过我们图形界面输入项生成的,那么这些项都表达什么意思呢?

    下面的内容我们可以从PDF规范1.6中找到:
    /Length 密钥的长度
    /Filter 生成密钥的方法,就是前面说的security handler
    /O 是由用户口令和权限口令得到的,用来生成密钥和验证输入的权限口令
    /P 访问权限的标志
    /R 标准加密的(standard security handler)的版本
    /U由用户口令生成,用来验证输入的用户口令或权限口令,是否要提醒用户输入密码
    /V  可选,用来指明加密的算法。

    当然加密字典还可能包含有其它项,但是这里我不打算介绍每项可能的值和对应的意思,因为这不是PDF规范的中文翻译,而是希望通过一系列的文章让读者能对PDF规范有个更好更快速地了解。
    接下来我们结合实际的例子来说明各个加密字典对象项表达的意思。

    /Length 128 
    %密钥的长度为128位
    /Filter/Standard 
    %内建的标准加密引擎standard security handler,对应的操作是口令加密的第4步,即选择Password Security
    /O(_??颖?>S8+E?v?-zE{\r?<??
    %由用户口令,权限口令,和文档ID生成的
    /P -3392
    %权限标志见PDF规范
    /R 3
    %加密版本3,如果V为2或3, 那么就属于“版本3或更高”的范畴,在下一篇文章中我们要用到这个概念
    /U(v???a垭驽h?                )
    %由用户口令得到,用来验证用户口令
    /V 2  
    %允许加密长度超过40位,在上述这个例子里例子里密钥为128位

    3 实现PDF加密需要回答的三个问题
    加密字典对象是通过我们对加密的方式的选择和输入的口令生成的,那每项的内容对PDF文件的加密和解密都是有关系的,接下来我们最关心的问题是如何来实现对一个PDF文件的加密?这个问题可以分解为四个小的问题:

    1.         文件的内容是如何被加密的?
    2.         加密密钥是如何生成的?
    3.         上面的加密字典中的每一项是如何生成的?
    4.         加密字典和加密密钥的关系?

    接下来的文章我将告诉你所有的这几个问题的答案。当然如果你要真正地写一个实现PDF口令加密的程序,那么还得参考PDF规范1.6。但是你觉得阅读起来有困惑的地方,那么我想下篇文章对你来说也会有帮助的,也会详细地告诉你如何通过编程来实现PDF文件的口令加密。
  • admin (2007-4-16 13:54:06)

    几个重要概念
    全局加密密钥,简称为全局密钥,该全局密钥由加密字典对象和你输入的口令生成,用来生成对象加密密钥。

    对象加密密钥,简称为对象密钥,是用来实际加密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规范,在有的步骤会有点迷茫的,相信下面的详细介绍对大家会有所帮助,如果你要实现自己的加密程序,也将给你一个指引。

    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函数。

    3.      (版本3或更高)连续做50次:此后输出作为输入新的MD5哈希函数中。

    4.      利用这个HASH数列的前面n位创建RC4密钥,对于版本2来说,n始终为5, 但对于版本3或更高版本来说,取决于加密字典中Length的值,为length/8。

    5.      按照算法3.2中的第一步由用户口令得到32字节字符串。

    6.      将第5步中产生的32位字节字符串用第4步中产生的密钥用RC4算法加密。

    7.      (版本3或更高)做19次:用前一次的输出作为下一次的输入进行编码;密钥是由第1步产生的原始密钥的单个字节和循环数和进行XOR(异或)运算得到的。

    char Test[32] = 第1步生成的32字符串。

    char temKey = Test[32];

    unsigned int keyLength = length/8;

    for (i = 1; i <=19; i++)

    {

         for (j = 0; j < keyLength; ++j)

         {

             tmpKey[j] = fileKey[j] ^ i;

        }

        rc4InitKey(tmpKey, keyLength, fState);

        fx = fy = 0;

        for (j = 0; j < 32; ++j)

         {

             test[j] = rc4EncryptByte(fState, &fx, &fy, test[j]);

    }



    8.      这32字节字符串即为加密字典对象条目O的值。




    图1


    2.1.2 得到全局加密密钥
    算法2:

    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>

    如果用户口令为空,那么就意味着没有用户口令,用这32个字节完全填充。

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

    3.将加密字典O条目输入MD5中。(算法3.3描述O值的产生)。

    4.将P条目作为无符号的4字节整数然后将该4字节输入MD5函数。

    5.将该PDF文档的ID标识数组的第一个元素(即该PDF文档中trailer字典中ID条目的第一个字符串)输入到函数MD5中。(关于PDF文档ID的介绍见文章“PDF文档ID”)

    6. (版本3或更高)如果该文档的metadata不加密,将4字节的0xFFFFFFFF输入哈希函数MD5中。

    7.结束散列。

    8.(版本3或更高)将前面MD5产生的HASH序列的前n位,也就是加密字典中的Length/8位字串,输入到新的MD5哈希函数中,此后输出作为输入连续再做49次。

    9.加密密钥就是这个HASH数列的前面n位,对于版本2来说,n始终为5,对于版本3或更高版本来说,就取决于加密字典中Length的值,n=length/8。

    这个算法,是根据用户口令字符串,产生全局加密密钥。






    图2


    2.1.3 生成条目U
    算法4 版本2:

    1 按照算法2的方法,基于用户口令字符串生成加密密钥。

    2 用上面步骤产生的加密密钥加密按照算法2步骤1生成的32位串。

    3 步骤2的输出即为加密字典对象中条目U的值。



    算法5 版本3:

    1按照算法2的方法,基于用户口令字符串生成加密密钥。

    2 初始化MD5 HASH函数并将按照算法2步骤1生成的32位字符串输入该函数。

    3 将文件ID数组中的第一个32位ID字串传入MD5函数。

    4 用第1步产生的密钥通过RC4算法来加密由步骤3输出的16位字符串。

    9.      做19次:用前一次的输出作为下一次的输入进行解码;密钥是由第1步产生的原始密钥的单个字节和循环数和进行XOR(异或)运算得到的。

    char Test[32] = 第1步生成的32字符串。

    char temKey = Test[32];

    unsigned int keyLength = length/8;

    for (i = 1; i <=19; i++)

    {

         for (j = 0; j < keyLength; ++j)

         {

             tmpKey[j] = fileKey[j] ^ i;

        }

        rc4InitKey(tmpKey, keyLength, fState);

        fx = fy = 0;

        for (j = 0; j < 32; ++j)

         {

             test[j] = rc4EncryptByte(fState, &fx, &fy, test[j]);

    }





    2.2 生成对象加密密钥并将对象加密
    算法3.1 用RC4和AES对数据进行加密算法:

    1.获得字符串对象或流对象的对象号(object number)和产生号(generation numer), 如果字符串对象是一个直接对象,则利用其包含该对象的标识符。

    2.将对象号和产生号作2进制整数对待,将原始的N字节长的密匙扩展到n+5字节,即将对象号的低3个字节和产生号的低2个字节依次接在前面N字节长的加密K密钥上, 顺序为低字节靠前。(如果密钥的长度为40那么n为5,如果V的值大于1, n的值就为Length除以8。)

    3.初始化MD5哈希函数,然后将步骤2产生的字符串输入到MD5中。

    4.用前(n+5)个字节,如果N+5>16那么截取前面的16个字节,将这个产生的hash结果作为RC4和AES对称加密算法的密匙来对该字符串或流对象进行加密。

    如果是用到AES算法,用到CBC模式。





                                                                                  图 3


    3 回答云木的问题
    云木的问题是这样,只有设置了权限口令的的PDF文件,是否可以直接从PDF文件中取出某个对象的流?

    他想这样的PDF文件应该是不加密的,因为PDF文件的内容是可以看到的,只是设置了一个用来表示权限的串。这是我上篇文章《PDF文件加密仿真》中说的,而且还说了可以有办法去掉这个串或者修改这个串,不过我也有在文章中用红色字体说明PDF文件中内容实际上是加密了的,只是加密密钥可以从加密字典中直接计算出来。

    那么这个密钥如何如何计算得到呢?我想由算法3.2和算法3.1就得出答案了。因为没有打开口令,那么直接由上面的32字节加密口令常量串填充,然后根据其它文件中的相关内容得到全局密钥。进而生成对象加密密钥。

    4 是否可以直接修改权限设置串
    有的人说可以直接修改加密字典中的条目P得到更大的权限,其实不然,因为按照加密算法2,全局加密密钥其中有个输入就是P, 如果P修改了,也不能正确得到加密密钥。你也可以实际试验一下,用 Ultra Edit打开,修改P条目,然后再用PDF reader打开,就会提示你输入口令,因为根据该PDF文件本身是无法得到加密密钥了。


    5 本文总结
    本文详细地对PDF文件的口令加密做了一个说明,相信你可以利用它来对PDF文件进行口令加密了,当然在一些细节方面你需要查询一下PDF规范。整篇文章采用多种方式来表达,目的只有一个,就是让整个内容显得非常明白容易理解。 在两个比较难懂的地方我用了伪码,我想这也会对你的理解有所帮助。

           当然,错误是在所难免的,如果你对文章有什么意见,或者有什么知道,或者你认为怎样会更好,那么我非常希望你能给我来信或者给我评论和留言。

           非常感谢!


    1.bmp


    2.bmp


    3.bmp

  • sdvbbk0 (2007-10-06 01:09:05)

    哇,楼主真是强人啊,这么专业,非常感谢~!!!
  • sellen (2007-11-06 19:05:51)

    研究的好细致,佩服佩服
  • yuhenet (2007-11-16 12:12:07)

    谢谢  ,学习
  • 史竺 (2010-9-12 11:19:48)

    办理真实文凭 QQ:81786342电话:13927481765 网址:http://www.xinghui668.com 联系人:王老师。 真实上网文凭 为你腾飞大学梦想!网上终身有效 让你梦想文凭成真! 成功仅仅是一步的路程,而我们应该如何面对呢?你有能力但没有文凭不行,但文凭仅仅是敲门砖, 你不可以没有,你只有拥有了,你才可以展示你的能力,如果没有这个敲门砖,你再大的能力也无能为力。 面对这个不看能力而注重文凭的 QQ:81786342 电话:13927481765 真实上网文凭 拥有到处都灵 终身永久可查 保你有用
  • 罗申 (2010-9-14 08:30:28)

    宇涵教育代考网咨询:QQ:394766619 服务城市:北京|南京|苏州|无锡|杭州|宁波|长沙|武汉|合肥|南昌|广州代考|深圳|厦门|天津|西安|成都|福州|南宁|哈尔滨|石家庄|太原|兰州|昆明|郑州|沈阳|长春|大连|青岛|重庆|南通|镇江|常州|扬州|徐州|温州|金华|湖州|嘉兴|舟山|绍兴|莆田|泉州|贵阳|代考网| QQ:394766619      
    代考网:南京、苏州、徐州、无锡、南通、连云港、扬州、杭州、宁波、温州、上海、义乌、丽水、合肥、阜阳、蚌埠、安庆、芜湖 北京、天津、石家庄、青岛、济南、太原、烟台 广州、深圳、东莞、汕头、珠海、中山、惠州、福州、厦门、泉州、  武汉、长沙、南昌、郑州、洛阳 东北代考: 哈尔滨、长春、沈阳、大连、吉林 重庆、成都、昆明、贵阳、南宁、海口、三亚 西北代考: 西安、兰州、银川、西宁、呼和浩特、乌鲁木齐 全国大型专业的联盟代考机构公司QQ:394766619
  • 吕任 (2010-9-14 14:18:45)

    替考成人高考/代考资产评估师考试QQ949192005星艺代考网★星艺专业代考权威机构(联系QQ949192005 网站:  http://www.xydk136.com).成立多年来服务于职称资格考试、英语考试、升学考试、公务员考试等国内各种考试培训领域。客户累计超过五千人次。专业提供代考(替考)服务和答案操作服务。
        4年来,本机构配备大量各门类考试的资深枪手,成功替考(代考)客户数量上千人次。已一手成功操作各种考试答案上百次,帮助无数客户度过考试难关。星艺代考网风风雨雨的四年来,获得广大客户的认可。并发展成国内知名的替考
    机构和一手操作团队、国内考试咨询拳头品牌! 4年来,本机构配备大量各门类考试的资深枪手,成功替考(代考)客户数量上千人次。已一手成功操作各种考试答案上百次,帮助无数客户度过考试难关。星艺代考网风风雨雨的四年来,获得广大客户的认可。
    1、《星艺考试网服务》地位信誉最佳100% 权威机构 信誉保证
    2、从开站4年来保持着100%通过Prometric和VUE金牌授权考点
    3、丰富的代考和代办操作经验,在全国各地吸收了众多的优秀枪手
    4、所有考试由授权讲师直接代理,优秀枪手众多,独家保证,一次不过,双倍赔偿
    5、我们的宗旨"多一分真诚就多一分信誉"我们将竭诚为您服务,助您一切顺利通过!
    星艺代考网专业提供: 代考经济师,代考司法,代考执业医师,代考四川招警考试,代考造价工程师,代考注册安全工程师,代考日语,级建造师,替考网,替考雅思,星艺代考网,武汉代考,北京代考,代考会计师,代考公务员,代考同等学历,代考雅思,教师资格证,司法,广州代考,武汉代考,深圳代考,北京代考等服务.本公告长期有效!!!
    网站:  http://www.xydk136.com咨询电话;15811571114  联系人:王先生  客服QQ;949192005
  • 雷放 (2010-9-15 19:04:21)

    江苏省人才市场2010年9月份招聘会计划


        一、招聘会场次

        9月4日(周六)综合性人才招聘会
         9月11日(周六)综合性人才招聘会
        9月12日(周日)医药医疗、生物化工、卫生保健、营销类专场人才招聘会
        9月18日(周六)综合性人才招聘会
        9月19日(周日)综合性人才招聘会

        二、招聘会地点

        南京市广州路213号省人才市场本部(公交线路:6、78、91、132、152、302、303路车广州路站;3、43、60、109、317路车拉萨路站)。
    运城人才网
       三、招聘会宣传
    盐城人才网
        招聘信息刊登在周四《扬子晚报》、《金陵晚报》、《现代快报》人才专版及江苏人才网(www.jsrc.com)。
    盐城人才
       四、展位预定
    江苏人才网
        招聘单位可至省人才市场一楼现场预定,或电话、传真预定。单位需提供:
        1、出示有效的营业执照(或事业单位法人登记证、驻宁机构登记证)副本原件并提交复印件,提交加盖公章的单位介绍信;
        2、外省、市用人单位还需提交经办人身份证复印件;
        3、已持有本市场《招聘登记证》的单位,只需出示《招聘登记证》和单位介绍信。
        联系人:朱小姐 吉小姐 商小姐 顾小姐  汤先生
    江苏英才网
        海报邮箱:请各参会单位将海报内容的电子文档于周四12:00前以word格式发至海报邮箱(jsrc213@163.com)。代打印海报每张20元。
      特别提醒:按法律法规及相关规定,单位不得以任何方式收取应聘者任何费用或扣留应聘者证件原件。
  • 潘良 (2010-9-17 11:25:59)

    不错的帖子支持了




















    http://www.4596.cn 减肥药排行榜,最有效的减肥药排行榜
  • 淅潆建jd (2010-9-17 13:45:48)

    大家看一下,我我这样缴社保养老金是不是赚了?

    大家觉得新闻里这三招可行吗?我发现我属于新闻里提到的第二招,看来跟我有一样问题的人还真不少。

    (以下新闻来源网络)



    热议“自保”出路 网民出高招
    资产组合或为上策


    “中国养老金目前‘空账’规模大约为1.3万亿元!”中国社科院世界社保研究中心主任郑秉文日前透露的这一惊人数字,激起了百姓的普遍关注。如果社保靠不住,那么老百姓怎么办?近期,在网络上,网友开始热议养老保险,更有许多网民支招“自保”。在口碑理财网的专题讨论中,网民还总结了“白领养老自保的三招

    在专题讨论中,网友们总结了“养老自保三招”。该网的活跃用户多以都市白领为主,这些“奇招”或许尚可代表诸多上班族的观点和做法。网友们的第一招是“少缴养老保险,改做个人自行投资”。但需要注意的是,养老保险本身具有保障属性,安全是第一位的。自行投资操作具有较大难度,还有蚀本的风险。而且大部分人缺乏合理规划资产配置的意识,一旦改为自行支配,很可能被挪为他用,失去了本应有的保障意义。人力资源和社会保障部社保基金监督司司长陈良表示,中国的基本养老金投资运营政策,是选择风险较小、收益相对稳定的投资品种,维护参保人权益。

    网友自保的第二招是“公司发放现金,个人回户籍所在地缴纳养老保险”。此种做法颇受在一线城市工作的上班族认同,因为工作城市生活成本过高,而老家成本较低。但这种办法在操作上比较困难,且与现行《劳动法》相悖,一些大公司不会配合员工做这种违规的事情。


    网友支的第三招是,“同时准备其他种类养老金”。即在不改变现有缴纳养老保险的同时,配合其他形式,如商业养老金、储蓄和投资等,以应对未来的庞大开支。虽然这种办法会让当前的支出压力增加,但却是目前最可行的方法之一,也是目前大多数白领采用的办法。专家表示,在条件容许的情况下,做综合的资产组合是比较可行的选择,可以包括一些风险较高的股票、基金,也可包括风险较低的保险、国债、储蓄等。

    看完新闻,回到正题。


    现在我也面临这样的选择,在北京上社保呢,还是回老家厦门上。本文源自
    很明显,北京的社保跟厦门比起来很多不足,比如厦门的社保很多药医保是报的,北京就只能自费;比如厦门的社保是没有起征点的,只要是医保可以报销的,直接划走,个人只要付个人的部分就行。北京这得1200起,1200以上的部分才给报。虽然未来的医保改革方向是全国统一,但是短时间内是实现不了的。
    因为不确定未来会在北京还是在厦门,所以没想好社保在哪上比较好,很纠结。

    另外,如果单位补给我现金的话,每月能补给我1500,而我回老家全额缴纳也才只缴纳600左右,这样中间我每月还能赚900左右,我这样缴纳养老保险是不是还赚了?
  • 夏耳 (2010-9-19 06:01:54)

    我要拿真我展示平台,放飞你梦想的地方。

    给你一个舞台,你将赢得全世界。

    真我展示给自己一个理由,你也可以成为网络明星

    快来吧:http://www.woyaona.com/portal.php?mod=topic&topicid=9
  • 田凹 (2010-9-19 21:31:35)

    北京外国美女上?QQ:  76132298电话:13264567897
    北京欧美日韩各国洋妞在京兼职上?服?电话:13264567897  QQ: 76132298北京美女服务中心,为社会各界成功男仕提供各类(在校学生,公司佳丽,迷情少妇,模特,极品等)商务美女服?.我们为您提供北京主城区2-4小-时上-服?,只要您一个电话,无论您在酒店,宾馆,公寓或者家里,都可以给您直接送上-门.为您提供一个方便,快捷,舒适,安全的兼职美女商务?平台. 北京商务美眉娱乐商务休闲中心,经过几年来凭着以诚为本,力求从服务到质量都做到最好的准责,已经成为同行当中的佼佼者,不满意可换,可退(不收取任何费用)。包干价格,可提供国家正式发-票。
    联 系 电 话:13264567897 qq 76132298

    北京美女上?|北京兼职小姐信息|北京美女上?服?|北京兼职妹妹上?服?|北京兼职上?服?|北京兼职女|北京小姐上?服?|北京洋妞上?服?|北京学生上?服?|北京模特上?服?|北京空姐上?服?|北京哪里有小姐上?服?|北京上?小姐信息|北京兼职小姐上?信息|北京出差找小姐

    注:非北京勿扰

    提供MM服务www.yynnmv.com有介绍和照片


  • 彭件 (2010-9-20 00:01:33)

    长期为全国各地客户网络办理各种仿真证件,QQ1092602009或QQ1294001368;24小时服务电话:13710738799,详细情况请登录http://www.chxbanzheng.com/验货满意后付款,绝无欺诈行为!我们的服务宗旨:诚信为本,精益求精。不只是留在字面上,我们的目标是要永远留在您的心中!
  • 袁宗 (2010-9-21 00:20:54)

    晶莹剔透的冰雕艺术如今已不再为人所陌生,除了在各式各样的冰雕艺术展上感受“冰清玉洁、鬼斧神工”之外,人们越来越多地可以从酒店开业、企业庆典、新人婚宴等场合领略其精美。现如今很多企业会在大型活动中首选冰雕作为“开场嘉宾”。
    本团队有多年设计和制作冰雕的经验!专业制作公司LOGO冰雕,创意冰雕,为公司庆典制作注酒(祝酒)冰雕仪式和破冰仪式,为婚礼新人制作婚礼宴会冰雕。
    本公司不仅为北京的公关公司,广告策划公司,商务会展公司及各大公司的公关部设计和制作冰雕,而且还可为全国地区设计,制作冰雕。在您的公司商务策划中,宴会上,新品新闻发布会上都用得到冰雕这项新兴产品!用它来为您衬托主题是您最佳的选择!
    本公司汇聚了大批齐齐哈尔市及周边地区冰雪艺术的技术骨干,可以满足您各种形式的冰雕,雪雕的制作。
    不要犹豫联系我们,我们的团队会为您提供最优的服务! 在我们的相册上有部分我们制作的项目案例供大家参考!我们也可为各大公关广告策划公司制作设计样稿(您设计我们为您制作)!
    10月特价1000/
    王小姐:15001340702         张先生:13681594834 15231644035
    QQ:3499843;103075736              QQ:2350901
    http://blog.sina.com.cn/dongshengbingdiao
  • 潘拓 (2010-9-21 19:45:46)

    北方重型汽车配件有限公司http://www.qp458.com/电话020-61131249  传真020-
    61131249 手机13710088029   王先生 地 址:广州市广园东路1540号大院B28档
    主营产品:机油泵、油嘴、气缸盖、排气管、曲轴、连杆、凸轮轴、发动机总成(电
    脑板)、进排气歧管、水泵、风扇、连杆总成、飞轮、三元催化器、油箱、水箱、化
    油器、传感器、空气流量计。刹车片、刹车蹄、刹车鼓、刹车盘、刹车大力古、制动
    器总成、制动总泵、制动分泵、ABS(电脑板)控制器、制动调整臂。起动机、发电机

    电机、雨刮电机、组合开关、传感器、调节器、分电器、线束、开关、仪表、玻璃升
    降器等。减震器、离合器,、钢圈、半轴、轮毂、轮壳、后桥壳、下摇臂、前桥总成、
    转向盘、转向器总成、转向节、转向轴、直、横拉杆。前嘴、前后杠、中网、 前大灯
    、尾灯、转向灯、雾灯、后视镜北方重型汽车配件有限公司http://www.qp458.com/
    话020-61131249  传真020-61131249 手机13710088029   王先生 地 址:广州市广
    园东路1540号大院B28档
  • obftohnw (2010-9-23 00:18:05)

    08的金融危机过后2010年又现二次下滑,在此期间我将原来的行业紧急刹车、脱离。由于此次经济下滑后市场更成熟,但还要清楚洗礼后的市场有诸多不确定因素。本人有多年的从商经历,对商业有独到之处,且有些小资本。需进一步寻求发展。
    寻求:
    一、     有发展的行业(产业项目);
    二、     网络经营销售,IT特色项目;
    三、     特色传统行业。新兴项目
    合作区域:津、唐、沈阳、大连等华北区域。
    同时,本人愿把商人的素质传授给热爱从商、品德兼优的有志青年,学历高中以上。
    投缘合作请先发短信至:18622032233。给我思考的时间和空间,我会联系你。


    [项目合作][项目合作网][项目合作方案][找项目合作][寻求合作项目][招商合作项目][中外合作办学项目][天津合作经济网][天津项目][天津创业项目][长城汽车天津项目][项目合作论坛][软件项目合作][寻找项目合作][寻求合作项目][天津合作伙伴][天津酷][天津项目][天津合作伙伴][天津IT][天津软件][天津金融][河北供销合作网][河北项目信息网][河北省项目库][河北项目][河北合作伙伴][德州企业信息][德州吧][德州项目][德州合作伙伴][唐山创业项目][唐山项目][唐山重点项目][唐山合作伙伴][秦皇岛][秦皇岛信息港][秦皇岛项目][秦皇岛旅游][秦皇岛房价][秦皇岛合作伙伴][辽宁省实验合作校][辽宁实验中学合作校][辽宁大学项目管理][辽宁项目][辽宁金融][辽宁合作伙伴][大连项目合作网][大连2010年项目][大连项目][大连合作办学][大连招商项目][大连金融][大连证券][大连合作伙伴][沈阳项目][沈阳金融][沈阳合作伙伴][沈阳实验中学合作校]
  • 韦甸 (2010-9-23 22:49:04)

    代考网,阳光代考网,南京代考,杭州代考,一级建造师代考,北京代考网,司法代考,长沙代考,上海代考,雅思代考网,重庆代考,经济师代考,医师代考,英语代考,工程师代考,托福代考,中级会计师代考QQ,821715592http://www.ygdkw.com
  • 蔡柳 (2010-9-26 17:58:14)

    公司网站 www.52cxxyk.com 联系 QQ 1534216086 电话 15055333221 本公司是直接和各银行的业务经理、审卡中心审核员合作,通过内部推荐的方式直接交中心审批,走银行绿色通道办理,专为资金周转不灵,、没有稳定工作和固定收入,年龄18周岁以上个人开展业务! 金卡1-4.9万。一张身份证可以同时办理多张, 公司设有专人接听银行回访电话, 100%包下卡.条件松(仅身份证扫描件)有无工作都可以办理,户口不限,下卡快(不超10天);额度高(1?10万),可以以卡养卡,利用透支出来的钱可以长期做生意,可以做为生意的启动资金,可解决您资金周转之急,同时本公司容易帮您提升额度和保持良好的信用纪录! 费用全市最低,办卡成功率高。
       (一)办理好处
       1:先消费后还款,享受最长达五十六天的免息还款期。
       2:累积个人信用记录,使用并且及时还款可以提高你的个人信用度,在以后贷款或
       者购房的时候获得更多的便利。
       3.跟现金相比,方便携带,刷还可以获得积分能够兑换银行提供的大量礼品
       (二)流程
       1.提交个人相关资料(见资料要求)联系QQ至1534216086。
       2.其他相关资料(工作证明、收入证明等)由本公司为你递交;
       3.带本人身份证原件到公司取卡或可按客户要求由公司派专人送卡
       4.按公司规定收取相关费用
       (三)资料要求
       1、本人身份证的正反面扫描件(请去照相馆扫描)(如是第一代的,需没有过期,只要扫描正面)
       2、在联系本公司时注明申请额度和类别(那家银行的)
       3、本人的手机号码, 公司或家庭固定电话号码(没有就写没有,由我们代做)
       4、提供一个固定的联系地址(后续送卡和银行账单的地址)
       5、是否黑名单?手上有无?(如有请写明额度和银行),近三个月内是否申请过?(如申请过请写清哪几家银行)
      请将以上资料与我们联系时提供清楚!
      银信信用担保帮你渡过资金危机,开创事业和生活新局面!
       欢迎新老客户光临
  • host555 (2010-9-29 06:26:08)

    在茫茫的岁月中,我忽然发现我根本不懂得什么是爱,什么是情。
    当初,我以为我对你的关心,是我对你的爱......
    曾经,我以为我对你的关注,是我对你的爱.....
    现在,我还是以为我对你的期待,是我对你的爱.....
    不知道为什么,随着时光的流逝,我渐渐的发现、、、那并不是爱
    当你说出那句话,我才从梦中醒来、、、
    才知道,是我一个人在唱独角戏.....
    当我用新开传奇私服泪汪汪的眼睛看这你时,只是想你告诉这一切不是真的,告诉你是爱过我的,你是有苦衷的、、、
    但你却甩下狠狠的一句话
    那时的我,心已经被你打碎了,就像破碎的玻璃,再也不能完好无缺
    在那一刻,我对你没有任何的期望
    你问我,人一生能爱几次?
    我含泪回答了你,人一生只能爱一次,在人轰轰烈烈爱过一次后,剩下的只有恋......
    既然说好分手,就不要回头
    既然说好分手,就不能掉下眼泪
    就这样,我们分手在人生的十字路口,可我在你转身离开哪一刻,1.76复古传奇泪水还是留了下来
    泪水流过才明白  爱不爱  原来心里早已存在