介绍
本博客将简要介绍如何使用 C# 和桌面可执行应用程序创建数字签名。
数字签名将在客户端系统上执行。数字签名令牌(DSC 令牌)安装在客户端本地系统中。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
为什么要使用可执行文件?
由于安全问题,我们无法从 Web 应用程序读取客户端数字签名令牌,并且所有其他可能性都被阻止。因此,我们继续使用本地 Windows 应用程序(即可执行文件 (.exe))。
检查下面提到的参考资料以继续:
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using X509Certificate = Org.BouncyCastle.X509.X509Certificate;
using iTextSharp.text.pdf.security;
所有上述参考资料均用于访问 DSC、签署 DSC、阅读 PDF 和创建新的签名 PDF。
为 X509Certificate2 创建变量
X509Certificate2 certClient = null;
获取所有注册到本地存储的 DSC 用户以及使用 X509Store、PFB 的当前用户
X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser);
X509Store“st”将收集所有证书
st.Open(OpenFlags.MaxAllowed);
X509Certificate2Collection collection = st.Certificates;
收藏后即可获得全部证书。
选择证书。
如果我们在本地注册了多个证书,并且我们想使用名称来选择有效的证书,请遵循以下流程:
发送“Name”作为 DSC 令牌所有者名称。您可以检查 DSC 令牌是否已过期。完成所有这些检查后,将值赋给“certClient”。
for (int i = 0; i < collection.Count; i++)
{
foreach (X509Certificate2 cert in collection)
{
certClient = cert;
username = certClient.Subject;
ErrorLogs(username);
startdate = certClient.GetEffectiveDateString();
enddate = certClient.GetExpirationDateString();
if (collection[i].Subject.Contains("Name"))
{
certClient = collection[i];
}
}
}
st.Close();
关闭 X509Store。
//Get Certificate 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));
}
选择需要签名的文件(输入文件)
string filename = @"C:\Users\admin\Desktop\sample.pdf";
将文件分配给 PDF 阅读器以编辑该文件。
PdfReader inputPdf = new PdfReader(filename);
创建一个新文件来保存签名的 pdf。
FileStream signedPdf = new FileStream(@"C:\Users\admin\Desktop\Sample_signed.pdf", FileMode.Create);
PdfStamper 将在“inputPdf”上创建印章并创建一个新的“signedPdf”
PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '\0');
签名使用 SHA-256 加密
IExternalSignature externalSignature = new X509Certificate2Signature(certClient, "SHA-256");
这将在输入 pdf 中创建签名文本
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
其他信息可以添加并显示在带有签名的签名部分。
signatureAppearance.Reason = "My Signature";
signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(0, 00, 200, 100), inputPdf.NumberOfPages, "Signature");
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0,CryptoStandard.CMS);
签名完成后,PdfReader 和 pdfStamper 将关闭。
inputPdf.Close();
pdfStamper.Close();
以上详细信息已经验证并有效。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
674

被折叠的 条评论
为什么被折叠?



