在 C# 中使用任意 DSC Token 进行数字签名

介绍 
 
本博客将简要介绍如何使用 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();  

以上详细信息已经验证并有效。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hefeng_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值