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

签名字节范围在Acrobat中无效

从智明
2023-03-14

我正试图使用我们正在制作的库来制作PDF文档的时间戳。我在PDF文档中添加了一个新的部分。我为签名和包含实际签名的签名对象添加了新的注释对象,并为新部分添加了新的外部参照表。当我检查外部参照条目时,一切似乎都正常。

当我尝试在Acrobat中验证我的签名时,我收到以下错误消息“此签名中包含的信息格式存在错误(签名字节范围无效)”。

但是,当我检查字节范围时,一切似乎都是正确的。我从文档的开头到Contents部分的开始括号,从它的末尾到文档的末尾。我将其与具有有效签名的文档进行了比较,似乎字节范围看起来是一样的。

我真的不明白出了什么问题,为什么Acrobat会显示这个错误。

如果有人想看一下,下面是签名文件的链接:https://ufile.io/mckajk9h

PS:我可以分享部分代码,但真正的问题是Acrobat reader以及它如何解释PDF签名,而不是我的代码。所以,相关部分应该是我共享的PDF文件。

共有1个答案

华坚成
2023-03-14

你的PDF中有一些问题。

导致非直观错误消息的主要原因是:增量更新交叉引用表中的第一个条目太短一个字节:

如您所见,第一个交叉引用表条目(0000000000 65535 f\n)太短了一个字节,根据规范,它必须正好有20个字节长,但您的条目只有19个字节长。

每当Adobe Acrobat看到结构损坏的交叉引用表时,它都会在内部修复该文件。在修复的文件中,对象被重新排列,这使得签名字节范围无效。

当我通过在f\n之间添加一个空格来解决这个问题后,Adobe Acrobat就不再抱怨格式化错误了。当然,它声称文件已经被修改或损坏,毕竟是我修改的。但至少它接受了签名结构。

您的一些偏移量不正确,在您的增量更新中,您有

xref
0 2
0000000000 65535 f
0000003029 00000 n 
12 2
0000003144 00000 n 
0000003265 00000 n  

因此,物体12应该从3144开始,但实际上它从3145开始。

此外,你有

startxref
19548
%%EOF 

所以xref关键字应该从19548开始,但它从19549开始。

 类似资料:
  • 我找不到为什么Foxit PDF阅读器显示我的签名文件无效。首先,我将空白签名容器插入pdf 我发送到外部Web服务以使用合格的签名进行签名。 接下来,我使用webservice的结果对pdf进行了签名。这是外部签名容器: 这是签名代码: 并且有结果: 找不到我做错了什么。

  • 如何修复“定义签名数据范围的意外字节范围值”。详细信息:使用PDFBOX在多个页面中添加外部签名时,签名字节范围无效(2.0.12) 以下代码适用于单页签名,而多页签名不起作用。 准备好哈希后,正在发送到另一台服务器以获取签名。在获得响应后,将签名添加到pdf中。 签名验证时出错。 定义签名数据范围的意外字节范围值。 详细信息:签名字节范围无效

  • 我正在使用pdfbox 3.0.0 RC创建PADES签名,我的代码使用示例创建数字签名。但是,当我使用此工具打开文档时,我无法在Adobe Acrobat中看到签名级别,尽管它能够验证我的签名。 我没有创建VRI,所以我猜测这可能是一个问题,但如果这是验证我的签名所必需的,我不明白为什么签名显示为有效? Adobe Acrobat签名:

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1810

  • 问题内容: 是否存在无限制版本(或对于Python 2),还是有必要手动定义它?例如 只能给我一个生成方的生成器,而我看不到任何明显的调用方式,以使它一直保持不变。 问题答案: 您正在描述的基本用法:

  • 我试图创建一个抽象层来模拟Oracle 11g中的DB2函数。目标是让当前运行DB2查询的客户重新指向Oracle抽象层,而无需更改其语法。 我在ABC模式下创建了以下函数: 当我试图在SQL语句中使用它时,会出现一个错误: 如果我显式地调用模式,它会工作: 我还有一个登录触发器,可以显式地将会话的当前_模式设置为ABC。我能看到的唯一复杂之处是,时间戳在Oracle中是一个关键字,但它允许我用这