Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多重签名无效_C#_Digital Signature_Itext7 - Fatal编程技术网

C# 多重签名无效

C# 多重签名无效,c#,digital-signature,itext7,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\sig

我尝试将我的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());
}

它还显示了第一个签名中的“文档随后发生了更改”信息

我不知道这是否是一个bug,但我甚至在7.1.3快照中尝试过

我尝试再次签名的已签名pdf是。
生成的临时pdf是。

这是由于iText 7中的错误造成的。在检索页面的注释以向其添加签名小部件时,所有注释都会被触摸:对其页面的可选引用会被添加到注释中,并标记为已更改

因此,该问题可以通过以下代码重现(在Java中;在C#中也是如此):

try(PdfDocument PdfDocument=new PdfDocument(new PdfReader(SOURCE)、new PdfWriter(DEST)、new StampingProperties(){
getPage(1.getAnnotations();
}
(测试
testStampSigned

仅执行此getter会导致更改第1页上的所有注释,从而使Adobe Reader对注释修改发出警告。如果签名是不允许更改的认证签名,则会导致原始签名无效


一个纯粹的能手不应该有这样的副作用。

有帮助吗?@stuartd Nope。已经检查过了。你的
ExtendedPdfSigner
类与itext
PdfSigner
有什么不同?@mkl
GetRangeStream
方法是
受保护的
,因此我通过
ExtendedPdfSigner
使它可用。如果使用了
PdfSigner
,结果是一样的。由于.NET核心支持,我想从5移植到iText7。然而,我想现在还为时过早。我想知道他们什么时候会发布一个稳定的版本,因为有很多问题都是关于这些bug的,是的,有一些bug。但请注意,新功能只会添加到itext 7中。因此,您可能会考虑使用iTXT 7实现新的功能(因为它们可能需要新的ITEXT特性),而仍然使用ITEXT 5用于旧的功能(这被证明是可行的)。