当前位置: 首页 > 知识库问答 >
问题:

加密PDF文档解密时如何在RC4和AES之间进行选择

李永寿
2023-03-14

我正在编写解析和分析PDF的代码,目前正在处理文档中的加密。我无法从规范中理解如何在两种可能的加密方法之间做出选择。PDF规范中的一些详细信息...加密字典的v字段支持以下值:

1=7.6.2“通用加密算法”中的“算法1:使用RC4或AES算法加密数据”,加密密钥长度为40位;见下文。

2=(PDF 1.4)7.6.2“通用加密算法”中的“算法1:使用RC4或AES算法加密数据”,但允许加密密钥长度大于40位。

长度字段定义为:

(可选;PDF 1.4;仅当V为2或3时)加密密钥的长度(以位为单位)。该数值应为8的倍数,范围为40至128。默认值:40。

第7.6.2部分“通用加密算法”列出了两种可能性:

加密PDF文件中的数据时,应使用以下算法之一:

•称为RC4的专有加密算法。[...]

•AES(高级加密标准)算法(从PDF 1.6开始)。...并且加密时的数据长度四舍五入为块大小的倍数,块大小固定为始终为16字节...

我有一个V=2,长度=128的示例文档,它是PDF1.6。我假设AES用于PDF 1.6以后的文档,但是用AES解密失败(尤其是流不是128位长的倍数)。使用RC4解密成功。

我的问题是,在开始处理文档时,我的代码如何知道如何初始化RC4解密?我在Encrypt字典中没有看到任何指定使用了哪种方法的内容。

共有1个答案

萧明贤
2023-03-14

我认为这里的规范有些混乱

2=(PDF 1.4)7.6.2“通用加密算法”中的“算法1:使用RC4或AES算法加密数据

是对文档中描述RC4和AES加密的一节的引用,但要实际启用AES加密,需要/v4

4=(PDF 1.5)安全处理程序使用CF、StmF和StrF条目指定的规则定义文档中加密和解密的使用。

因此/v4或更高版本是先决条件,因此您需要进一步查阅/cf/stmf/strf条目。

具有基本AES加密的加密字典可能如下所示:

/Encrypt <<
  /V 4
  /R 4
  /StmF /StdCF
  /StrF /StdCF
  /CF <<
    /StdCF <<
      /CFM /AESV2
    >>
  >>
  % + other entries /O /U Length etc
>>
 类似资料:
  • 问题内容: 我已经编写了服务器,并在中编写了客户端。他们的工作是将秘密消息从服务器发送到客户端,并使用进行加密。我正在使用库,也就是说,我使用私钥初始化对象,并使用加密消息。然后,我将此加密的消息发送到服务器,并尝试使用库 使用相同的私钥对其 进行 解密。问题是它无法正确解密。它总是输出128位长的消息,其中秘密消息被随机放置在其中,通常应返回just 。 问题答案: 问题是关于填充。Python

  • 问题内容: 这是我正在做的事情,可能看起来有些笨拙,但是可以帮助您解决该问题。我得到一个。阅读几乎所有相关主题,但找不到合适的解决方案。我是加密解密程序设计的新手,需要在我的Java应用程序之一中实现它。 谢谢..这就是代码的样子.... 问题答案: 在这里,您需要了解的是密文可能包含不可打印的字符。因此,当您使用readLine()时,它可能不会为您提供文件中的所有字节。 同样,它并没有给您您认

  • 问题内容: 我迅速编写了一个应用程序,我需要AES加密和解密功能,我从另一个.Net解决方案中接收了加密数据,但是我找不到解决办法。 这是我的.net加密: 我需要迅速解密功能。 问题答案: 我找到了解决方案,它是一个很好的库。 跨平台256位AES加密/解密。 此项目包含在所有平台(C#,iOS,Android)上均可使用的256位AES加密的实现。关键目标之一是通过简单的实现使AES在所有平台

  • 问题内容: 我想生成rsa密钥对(公共和私有),然后将它们用于AES加密和解密。例如,用于加密的公共密钥和用于解密的私有密钥。我为此编写了一个简单的代码,但是问题是当我运行时这段代码我得到这个错误: 我该如何解决这个问题?我的加密代码如下: 问题答案: 如评论中所建议,我搜索了“混合密码术”。这个例子解决了我的问题。

  • 问题内容: 更新 我已经对C#代码进行了更改,因此它使用的块大小为256。但是现在,您好世界看起来像这样http://pastebin.com/5sXhMV11,我无法弄清楚应该使用rtrim()获得什么一团糟的最后。 另外,当您说IV应该是随机的时,您的意思是不要再使用一次相同的IV,否则我编码的方式错误吗? 再次感谢! 你好 我正在尝试使用在C#中加密的PHP解密字符串。我似乎无法让PHP使用

  • 问题内容: 有没有一个很好的示例,说明如何在Android上使用AES 加密和解密图像及其他文件? 问题答案: 并像这样调用它们: 这应该可行,我现在在项目中使用类似的代码。