当前位置: 首页 > 知识库问答 >
问题:

使用iText7 C#为pdf签名

孟跃
2023-03-14

我有一个私人钥匙在档案里。“privatekey.pem”并且不知道如何创建icipherparameters pk=;谁能帮助我吗?我正在尝试使用IText7签名pdf。

using System;
using System.Drawing;
using System.Windows.Forms;
using Org.BouncyCastle.Crypto;
using System.Security.Cryptography.X509Certificates;
using iText.Signatures;
using System.IO;
using iText.Kernel.Pdf;
using Org.BouncyCastle.X509;
/* ..... */

    protected void SignTest2()
    {
        bool isAppendMode = false;
        string dest = "signtest.pdf";
        string source = "test.pdf";
        int certificationLevel = 1;
        string reason = "Test reason";
        string location = "Warsaw";
        bool setReuseAppearance = false;
        string name = "Test name";


        ICipherParameters pk = ;

        System.Security.Cryptography.X509Certificates.X509Certificate cert = new System.Security.Cryptography.X509Certificates.X509Certificate("fullchain.pem");
        X509Certificate2 signatureCert = new X509Certificate2(cert);
        Org.BouncyCastle.X509.X509Certificate bcCert = new X509CertificateParser().ReadCertificate(cert.GetRawCertData());

        Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[1] { bcCert };

        PdfReader reader = new PdfReader(source);
        StampingProperties properties = new StampingProperties();
        if (isAppendMode)
        {
            properties.UseAppendMode();
        }
        PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), true);
        signer.SetCertificationLevel(certificationLevel);
        PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location
            ).SetReuseAppearance(setReuseAppearance);

        signer.SetFieldName(name);
        // Creating the signature
        IExternalSignature pks = new PrivateKeySignature(pk, "SHA-512");
        signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
    }

共有1个答案

尚安平
2023-03-14

好吧,我想办法解决。如果您在“privkey.pem”文件中只有私钥,那么它就会起作用。

    private static AsymmetricKeyParameter readPrivateKey(string privateKeyFileName)
    {
        AsymmetricKeyParameter key;

        using (var reader = File.OpenText(privateKeyFileName))
        {
            PemReader pemReader = new PemReader(reader);
            key = (AsymmetricKeyParameter)pemReader.ReadObject();

        }
        return key;
    }

    protected void SignTest2()
    {
        bool isAppendMode = false;
        string dest = "signtest.pdf";
        string source = "test.pdf";
        int certificationLevel = 1;
        string reason = "Test reason";
        string location = "Warsaw";
        bool setReuseAppearance = false;
        string name = "Test name";


        //ICipherParameters pk = Pkcs12FileHelper.ReadFirstKey("privkey.pem", null, null);
        ICipherParameters pk = readPrivateKey("privkey.pem");
        System.Security.Cryptography.X509Certificates.X509Certificate cert = new System.Security.Cryptography.X509Certificates.X509Certificate("fullchain.pem");
        X509Certificate2 signatureCert = new X509Certificate2(cert);
        Org.BouncyCastle.X509.X509Certificate bcCert = new X509CertificateParser().ReadCertificate(cert.GetRawCertData());

        Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[1] { bcCert };
        //ICipherParameters pk = signatureCert.GetECDsaPrivateKey();

        PdfReader reader = new PdfReader(source);
        StampingProperties properties = new StampingProperties();
        if (isAppendMode)
        {
            properties.UseAppendMode();
        }
        PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), true);
        signer.SetCertificationLevel(certificationLevel);
        PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location
            ).SetReuseAppearance(setReuseAppearance);

        signer.SetFieldName(name);
        // Creating the signature
        IExternalSignature pks = new PrivateKeySignature(pk, "SHA-512");
        signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
    }
 类似资料:
  • 我正在尝试使用远程web服务来演唱pdf,该服务返回一个XML签名,该签名由签名和最终用户证书组成。 我需要使用此签名通过IText签名对pdf进行签名,因为web服务。 所有IText示例都使用消息格式,但我不确定应该如何处理XML签名。 打开临时Pdf并嵌入接收到的签名的代码 从web服务返回的XML签名: 当我将返回的签名与上面的代码一起使用时,签名验证失败,出现“错误遇到时BER解码”。

  • 我有一个场景,我需要用iText7库从pdf中获取签名信息。签名可能存在,也可能不存在。当我为没有任何数字签名的PDF实例化一个新的对象时,会出现异常 “没有相关的PdfWriter用于进行间接操作。” .如果有签名,就很好用。我不确定如何纠正这个异常。 更新为包含代码示例

  • 需要通过使用外部webservice对文档哈希进行签名来签署PDF,该过程必须在2个步骤中完成,并使用临时空签名。 在Priyanka问题和Grazina问题之后,阅读了那些帖子上的mkl答案,我现在有一个无效的签名,即使像Grazina那样添加了哈希前缀。 iTextSharp版本:5.5.13.1 这个节目是我上一个问题的另一个问题。当前代码(编译并开始调用SignPDF方法): 获得的结果

  • 我正在尝试为PDF签名执行以下设置,将其分解为客户端和服务器之间的异步步骤: null 我所做的基本上是将该摘要发送给客户机进行签名,然后在服务器上重做上述步骤并设置客户机签名: 此设置最终导致文件完整性被破坏,因为在服务器上嵌入后,我要创建一个新的PDSignature。有没有一种方法可以序列化调用addSignature后创建的PDDocument,这样我以后就可以在服务器上反序列化它并添加客

  • 遵循http://itextpdf.com/book/digitalsignatures中的“使用智能卡和PKCS#11签名文档”主题并创建与所提供的代码示例类似的代码示例后,签名的文件签名在Adobe Reader中无效,签名外观具有不可否认证书的名称(即eID所有者的名称),但在Adobe Reader的签名面板中显示: 我使用的是金雅拓PinPad和葡萄牙语eID与eID中间件软件一起安装,

  • 随着WebCrypto API的发展和Chrome和Firefox的支持,我想使用它对PDF文档进行数字签名。这里的文献不多,但我找到了一些例子[1]和一个名为pki.js[2]的库。在示例中,描述了签名过程,但最终返回签名。我希望我的Base64 PDF文件再次返回一个签名的Base64字符串,但不幸的是,这不是发生的事情。据我所知,pki.js也没有提供签署Base64 PDF的方法。 有没有