pdf - Acrobat 中的签名字节范围无效

标签 pdf adobe digital-signature acrobat pades

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

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

但是,当我检查字节范围时,一切似乎都是正确的。我从文档的开头到内容部分的左括号,然后从结尾到文档的结尾。我将它与具有有效签名的文档进行了比较,字节范围看起来是相同的。

我真的不明白出了什么问题以及为什么 Acrobat 显示此错误。

如果有人想看的话,这里是签名文件的链接:https://ufile.io/mckajk9h

PS:我可以分享部分代码,但实际问题是关于 Acrobat 阅读器及其如何解释 PDF 签名,而不是我的代码。因此,相关部分应该是我共享的结果 PDF 文件。

最佳答案

您的 PDF 中存在一些问题。

主要问题

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

screenshot

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

每当 Adob​​e 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 

因此外部参照关键字应该从 19548 开始,但它却从 19549 开始。

关于pdf - Acrobat 中的签名字节范围无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67620281/

相关文章:

javascript - pdf渲染时显示加载图像

javascript - Adobe PDF - 提交表单时动态设置主题

python - M2Crypto RSA.sign 与 OpenSSL rsautl -sign

Java ECDSAwithSHA256 签名长度不一致

c# - 每个椭圆曲线签名生成的不同签名

android - React PWA 无法在 Chrome 中打开外部 PDF(Android)

javascript - 使用pdfmake在angularjs中生成pdf时图像不显示

javascript - 使用extendscript返回文件夹路径

video - 导入 H264 MP4 文件时,Adobe Premiere CC Pro 崩溃

java - Java 中的 xhtml 到 pdf 转换中的数学方程支持