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

解密加密PDF文档时如何在RC4和AES之间进行选择,pdf,Pdf,我正在编写解析和分析PDF的代码,目前正在处理文档中的加密。我无法从规范中理解如何在两种可能的加密方法之间进行选择。PDF规范中的一些详细信息。。。 加密字典的V字段支持以下值: 1=算法1:使用中的RC4或AES算法对数据进行加密 7.6.2,通用加密算法,加密密钥长度为40位;见下文 2=PDF 1.4算法1:数据加密 使用RC4或AES算法在7.6.2,通用加密中 算法,但允许加密密钥长度大于40 点点滴滴 长度字段定义为: 可选;PDF 1.4;仅当V是加密长度的2或3时 键,以位为单位

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

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

2=PDF 1.4算法1:数据加密 使用RC4或AES算法在7.6.2,通用加密中 算法,但允许加密密钥长度大于40 点点滴滴

长度字段定义为:

可选;PDF 1.4;仅当V是加密长度的2或3时 键,以位为单位。该值应为8的倍数,范围在40到40之间 128默认值:40

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

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

•一种称为RC4的专有加密算法。[……]

•AES高级加密标准 从PDF 1.6开始的算法。。。加密时数据的长度向上取整为倍数 块大小的,它被固定为始终为16字节

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


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

我认为该规范在这里有些混乱

2=PDF 1.4算法1:使用RC4或AES加密数据 算法7.6.2,通用加密算法

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

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
>>

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

2=PDF 1.4算法1:使用RC4或AES加密数据 算法7.6.2,通用加密算法

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

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
>>

不,我正在查看的示例文档具有/V 2,并且使用RC4加密/V4支持在文档中单个项的级别控制加密,而对于/V1或/V2,所有字符串和流都使用相同的方法。这是整个加密对象:420 0 obj endobj它是V=2,没有StmF或StrF。如果V=4,则为是,其他字段可能会指定加密方法,但在相关文档中并非如此RC4@Stuart不,我正在查看的示例文档有…-如果您有在问题上下文中查看的特定文档,请与他人分享,以使潜在的回答者不会浪费时间回答您根本不想要的细节。@mkl-但我确实在我的原始帖子中列出了加密词典的所有相关字段。虽然我在这里的评论中引用了对象raw,但它不包含任何额外的相关内容。不,我正在查看的示例文档具有/V 2,并且使用RC4加密/V4支持在文档中单个项的级别控制加密,而对于/V1或/V2,所有字符串和流都使用相同的方法。这是整个加密对象:420 0 obj endobj它是V=2,没有StmF或StrF。如果V=4,则为是,其他字段可能会指定加密方法,但在相关文档中并非如此RC4@Stuart不,我正在查看的示例文档有…-如果你在问题的上下文中有特定的文档,一定要与他人分享,这样潜在的回答者就不会浪费时间 我们正在详细讨论您根本不想要的内容。@mkl-但我确实在我的原始帖子中列出了加密字典的所有相关字段。虽然我在这里的评论中引用了对象raw,但它不包含任何额外的相关内容