通过在C#中使用itextSharp,可以与USB令牌签名



我试图通过在c#中使用itextSharp在USB令牌上签署PDF文件,但没有获得任何成功。如果有人有任何解决方案从USB令牌中获取证书并在C#中以数字签名的PDF文件。

这是获得证书的代码:

X509CertificateParser cp = new X509CertificateParser();
        //Get Sertifiacte
        X509Certificate2 certClient = null;
        X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        st.Open(OpenFlags.MaxAllowed);
        X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates,
            "Please choose certificate:", "", X509SelectionFlag.SingleSelection);
        if (collection.Count > 0)
        {
            certClient = collection[0];
        }
        st.Close();
        //Get Cert Chain
        IList<X509Certificate> chain = new List<X509Certificate>();
        X509Chain x509Chain = new X509Chain();
        x509Chain.Build(certClient);
        foreach (X509ChainElement x509ChainElement in x509Chain.ChainElements)
        {
            chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate));
        }

这是我的签名代码:

PdfReader inputPdf = new PdfReader(fileInsert);
                FileStream signedPdf = new FileStream(File_rename(fileInsert, "_signed"), FileMode.Create);
                PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '');
                IExternalSignature externalSignature = new X509Certificate2Signature(certClient, "SHA-1");
                PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
                //signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage);
                //signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(0, 00, 250, 150), inputPdf.NumberOfPages, "Signature");
                signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0,
                    CryptoStandard.CMS);
                inputPdf.Close();
                pdfStamper.Close();

FileInsert是您要签名和

的文件名称
File_rename(fileInsert, "_signed")

是一种将原始文件名称命名为" noname.pdf"(noname_signed.pdf"的方法

和使用的库:

using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using System.Security.Cryptography.X509Certificates;
using X509Certificate = Org.BouncyCastle.X509.X509Certificate;

我希望它有帮助,几年前,我使用一些搜索论坛的示例编写了代码,但有时我仍然使用它。

最新更新