首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中使用iTextSharp实现USB令牌文件签名

在C#中使用iTextSharp实现USB令牌文件签名
EN

Stack Overflow用户
提问于 2017-04-22 13:12:11
回答 1查看 4.4K关注 0票数 3

我正在尝试用C#中的iTextSharp用USB token对PDF文件进行签名,但没有成功。如果任何人有任何解决方案,从USB令牌和数字签名的PDF文件在C#中获取证书。

EN

回答 1

Stack Overflow用户

发布于 2017-05-19 18:29:37

下面是获取证书的代码:

代码语言:javascript
复制
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));
        }

下面是我的签名代码:

代码语言:javascript
复制
PdfReader inputPdf = new PdfReader(fileInsert);

                FileStream signedPdf = new FileStream(File_rename(fileInsert, "_signed"), FileMode.Create);

                PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '\0');

                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是要签名的文件名,

代码语言:javascript
复制
File_rename(fileInsert, "_signed")

是一种将原始文件名如"noname.pdf“重命名为"noname_signed.pdf”的方法。

以及使用的库:

代码语言:javascript
复制
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using System.Security.Cryptography.X509Certificates;
using X509Certificate = Org.BouncyCastle.X509.X509Certificate;

我希望它能有所帮助,几年前我用我在论坛上找到的一些例子写了代码,但我有时仍然会使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43555512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档