c# - 多重签名不起作用

标签 c# digital-signature itext7

我尝试将我的 iText5 代码移植到 iText7 中。我设法签署了一个未签名的 pdf 就好了,但是我在签署一个已经签名的文档时遇到了一些麻烦。

我简化了代码。下面将一些有趣的东西放入我的pdf中。代码:

using (var os = new MemoryStream())
{
    var pdfSigner = new ExtendedPdfSigner(new PdfReader(new MemoryStream(File.ReadAllBytes(@"C:\Users\x\Desktop\signed.pdf"))), os, true);
    var external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached);
    pdfSigner.SignExternalContainer(external, 8192);
    File.WriteAllBytes(@"C:\Users\x\Desktop\tempFile.pdf", os.ToArray());
}

tempFile screenshot

它还在第一个签名中显示“文档有后续更改”消息。

我不知道这是否是一个错误,但我什至在 7.1.3 快照中尝试过。

我尝试再次签名的签名 pdf 是 this . 生成的临时 pdf 是 this .

最佳答案

这是由于 iText 7 中的一个错误。在检索页面的注释以将签名小部件添加到它们时,所有注释都被触及:向它们添加了对其页面的可选引用,并将它们标记为 < em>改变了。

因此,此问题可以通过此代码重现(在 Java 中;在 C# 中类似):

try (   PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE), new PdfWriter(DEST), new StampingProperties().useAppendMode())) {
    pdfDocument.getPage(1).getAnnotations();
}

( SignTwice 测试 testStampSigned)

仅执行此 getter 会导致第 1 页上的所有注释被更改,因此 Adob​​e Reader 会发出有关注释修改的警告。如果签名是不允许更改的认证签名,这将导致原始签名无效!

单纯的 setter/getter 绝不能有这样的副作用。

关于c# - 多重签名不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51812973/

相关文章:

java - iTextPdf7 - 从资源中获取字体

c# - typeof(T) 可能返回 null

c# - 侧重于 Web 应用程序的 AI 编程资源

c# - 匿名方法 (lambda) 中捕获的外部变量

java - java中的XML签名验证失败

php - 如何使用 PHP 向任何文件添加数字签名(RSA、证书等)?

c# - 计算给定长度的所有可能子序列 (C#)

android - android数字签名是否改变?

itext7 - itext 7 在单独页面的顶部添加多个图像

c# - 切换文档渲染器 - 无法在已刷新的页面上绘制元素