ABCpdf签名和加密不兼容

时间:2017-09-21 10:46:19

标签: c# pdf abcpdf

我的PDF文档需要同时为digitally signedencrypted。 我正在使用ABCPDF,当我将数字签名应用于加密的文档时,签名将失效。

Adobe Acrobat Reader提供的错误是:" 对此文档进行了更改,使签名无效"

源代码:

using (Doc doc = new Doc())
{
    doc.Read(pdfPath);
    if (options.Encrypt) 
    {
        doc.Encryption.Type = 4;
        doc.Encryption.SetCryptMethods(CryptMethodType.AESV3);
        doc.Encryption.Password = Encryption.Decrypt(options.UserPassword, PdfSecurityOptions.EncryptionPassword);
        doc.Encryption.OwnerPassword = Encryption.Decrypt(options.OwnerPassword, PdfSecurityOptions.EncryptionPassword);
    }
    if (options.Sign)
    {
        byte[] bytes = Convert.FromBase64String(options.Certificate);
        X509Certificate2 certificate = new X509Certificate2(bytes, Encryption.Decrypt(options.CertificatePassword, PdfSecurityOptions.EncryptionPassword), X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
        PdfUtils.DigitallySign(
            doc,
            options.SignatureText,
            options.Rectangle, 
           certificate
        );
    }  
    doc.Save(savePath);
}

我尝试过:

  • 应用加密before签名
  • 应用加密after签名
  • 应用加密,保存文档,然后加载并签名

1 个答案:

答案 0 :(得分:0)

您可以在完成另一个签名之后执行签名;这样做,你将腐败第一次签名。

为避免这种情况,每次签名完成后都必须使用增量更新。 查看Abcpdf在线文档

http://www.websupergoo.com/helppdfnet/source/6-abcpdf.objects/signature/1-methods/commit.htm

我已经测试了您的代码,签名显示正常。我认为您在添加字段的方式上存在问题。我看到你正在使用Abcpdf示例代码。也许你需要对它进行一些改动。你能提供pdf样本吗?