gpt4 book ai didi

java - 如何使用 iText 检测签名的 pdf 是否有效?

转载 作者:行者123 更新时间:2023-12-01 09:09:59 25 4
gpt4 key购买 nike

对于一个项目,我需要检查数字签名是否有效。我已经开发了一段代码来做到这一点。我用一些 pdf 进行了测试(无论正确与否),代码似乎可以工作。但有一种情况是验证不成功。

在 Adob​​e Reader 中,我收到消息“文档自签名以来已被更改或损坏”。有一个“美丽的”红十字......不幸的是,我不知道如何测试这个最重要的案例。

因为如果我理解,签名是正确的,但被更改的是文档,而不是签名。

我想我们可以使用文件的哈希值,但我不知道如何正确提取此信息。

如何使用 Itext 检查这一点?

作为引用,我测试了以下方法:

  • pdfpkcs7.verify():返回 true
  • acroFields.signatureCoversWholeDocument(signame):返回 true
  • pdfReader.isRebuilt():返回 false

最佳答案

Adobe 已在 this document 中记录了他们在签名中接受的算法选择。 。特别是其中声明了所有适用的 PDF 版本

DSA only supports SHA1 and adbe.pkcs7.detached

另一方面,OP 的文档使用带有 SHA256 的 DSA。效果是这样的

  • Adobe Reader 无法肯定地验证哈希值,但是
  • iText(不限于这些算法组合)可以。
<小时/>

实际上签名本身的签名算法信息一开始就有问题,它仅仅使用了OID 1.2.840.10040.4.1,这仅表明使用了DSA,而不是它所使用的摘要算法。严格来说,应该使用不同的 OID:

  • 对于带有 DSA 的 SHA1:1.2.840.10040.4.3
  • 对于带有 DSA 的 SHA256:2.16.840.1.101.3.4.3.2

(甚至还有一些替代方案,其中大部分已被弃用。)

仅找到 1.2.840.10040.4.1(仅 DSA)验证者必须猜测/推论摘要,并且假设 SHA1(如 Adob​​e Reader 所做的那样)并非完全不合理。

iText 最有可能猜测所使用的 SHA256,因为此摘要算法还用于计算签名属性 messageDigest 中的文档摘要。

关于java - 如何使用 iText 检测签名的 pdf 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com