【问题标题】:How can I check how many times a PDF file had been signed?如何查看 PDF 文件的签名次数?
【发布时间】:2019-01-09 16:30:00
【问题描述】:

如何使用 C#,最好是 iTextSharp 5.5.11 检查 PDF 文件的签名次数?只要能完成这项工作,我对任何其他 .NET PDF 库都持开放态度。

我想从我的硬盘驱动器中选择一个 PDF 文件,并在表单上显示该 PDF 文件被签名的次数。

显示证书来源将是一个奖励。

谢谢。

【问题讨论】:

  • 证书是指签名?还是您的意思是 X.509 证书?
  • 好的。要使用 PDF,您应该使用 PDF 库。通用 PDF 库通常支持 PDF 签名,并有一个 API 允许您以明显的方式访问签名信息。
  • Itext 的签名 api 确实允许计算现有签名。如果您在谈论 itext 7,请注意签名 api 在其自己的模块中。

标签: c# pdf itext bouncycastle x509certificate


【解决方案1】:

由于iText同时存在于Java和C#中,而Digital Signatures tutorial for iText是用前者编写的,我将用Java给出答案,将其移植到c#应该没有问题:

可以使用SignatureUtil#getTotalRevisions() 获取号码。它旨在为您提供文档中的签名数量,或者如果在最后一次签署文档后应用了更改,则该数字加一。

请查看C5_01_SignatureIntegrity。这里处理了三个文件:第一个已经签名,然后修改,第二个有四个人签名,第三个有四个人签名然后修改。 SignatureUtil#getTotalRevisions() 分别为它们返回 2、4 和 5。

第一种和第三种情况的结果有点误导,但是可以使用SignatureUtil#signatureCoversWholeDocument(String)来检查最后一个修订是否对应于最后一个签名。

【讨论】:

  • Uladzimir 使用了 itext 7.x,它完全重写了 itext 5 及之前的版本。话虽如此,如果您只是从 itext 开始,您可能希望使用当前版本 7.x 而不是旧的 5.x 版本。
  • 如果你因为某些原因需要使用旧的5.x版本,上面引用的例子对应的5.x例子是C5_01_SignatureIntegrity.cs from here
猜你喜欢
  • 2012-10-31
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2015-03-05
相关资源
最近更新 更多