C#代码实现在Word文档中添加数字签名
数字签名可用于确认数字文档的来源真实性,并确保文档在传输过程中未被篡改。使用数字签名能够减少纸质文件的传递需求,同时降低文档打印、邮寄和存储的成本,从而节省时间和费用。本文将介绍如何在 C# 和 VB.NET 中为 Word 文档添加数字签名。
安装相关组件
在开始之前,需要先在 .NET 项目中添加所需的 DLL 引用。您可以通过下载安装包手动添加 DLL 文件,也可以直接通过 NuGet 进行安装。
PM> Install-Package Spire.Doc
在 C#、VB.NET 中为 Word 添加数字签名
实现过程如下:
- 创建 Document 对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文档。
- 指定 .pfx 证书文件的路径以及密码。
- 在保存文档时,通过 Document.SaveToFile(string fileName, FileFormat fileFormat, string certificatePath, string securePassword) 方法为文档添加数字签名。
此外,还可以使用以下方法对 Word 文档进行数字签名:
public void SaveToFile(string fileName, FileFormat fileFormat, byte[] certificateData, string securePassword); public void SaveToStream(Stream stream, FileFormat fileFormat, byte[] certificateData, string securePassword); public void SaveToStream(Stream stream, FileFormat fileFormat, string certificatePath, string securePassword); public static byte[] Document.Sign(Stream sourceStream, byte[] certificateData, string securePassword); public static byte[] Document.Sign(Stream sourceStream, string certificatePath, string securePassword);
完整示例代码
完整代码如下:
using Spire.Doc;
namespace DigitallySignWord
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 加载 Word 文件
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.docx");
// 指定数字证书路径
string certificatePath = "C:\\Users\\Administrator\\Desktop\\gary.pfx";
// 指定证书密码
string password = "e-iceblue";
// 在保存为 .docx 文件时为文档添加数字签名
doc.SaveToFile("AddDigitalSignature.docx", FileFormat.Docx2013, certificatePath, password);
}
}
}知识扩展
给 Word 文档添加数字签名,在 C# 中有多种实现方式。以下是几种主流方案的完整代码示例和使用说明。
数字签名与数字证书
在开始编码之前,需要理解两个基础概念:
- 数字签名:一种电子形式的签名,用于验证签名者的身份并确保文档未被篡改。
- 数字证书(.pfx 文件):创建数字签名的关键,包含公钥和签名者的身份信息,供他人验证签名真伪。
你需要准备一个有效的 .pfx 证书文件及其密码才能进行数字签名。若无可用证书,可通过 I love PDF 获取权威 CA 签发的证书,或使用 OpenSSL 生成自签名证书用于开发测试。
方案一:Aspose.Words for .NET(推荐)
Aspose.Words 是功能最全面的商业库,支持基础签名、签名行添加、批量签名等多种场景。
步骤 1:安装 NuGet 包
在 Visual Studio 的“程序包管理器控制台”中执行:
Install-Package Aspose.Words
步骤 2:导入必要的命名空间
using Aspose.Words; using Aspose.Words.Saving; using System.Security.Cryptography.X509Certificates;
场景 A:为现有 Word 文档添加数字签名(基础版)
using Aspose.Words;
using Aspose.Words.Saving;
string dataDir = @"C:\YourDocumentDirectory\";
// 加载数字证书
CertificateHolder certHolder = CertificateHolder.Create(dataDir + "morzal.pfx", "aw");
// 加载待签名的 Word 文档
Document doc = new Document(dataDir + "Digitally signed.docx");
// 对文档进行数字签名并保存
DigitalSignatureUtil.Sign(dataDir + "Digitally signed.docx",
dataDir + "Document.Signed.docx",
certHolder);代码说明:DigitalSignatureUtil.Sign 的第一个参数是原始文档路径,第二个是签名后的输出路径,第三个是证书持有者。
场景 B:为文档添加签名行并签名(可视化签名)
如果希望在文档中创建一个可视化的签名行区域,可以使用以下代码:
using Aspose.Words;
using Aspose.Words.Drawing;
using Aspose.Words.Signing;
string dataDir = @"C:\YourDocumentDirectory\";
// 创建新文档
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 插入签名行
SignatureLine signatureLine = builder.InsertSignatureLine(new SignatureLineOptions()).SignatureLine;
// 保存带有签名行的中间文档
doc.Save(dataDir + "SignDocuments.SignatureLine.docx");
// 配置签名选项
SignOptions signOptions = new SignOptions
{
SignatureLineId = signatureLine.Id,
SignatureLineImage = File.ReadAllBytes(dataDir + "signature_image.png") // 可选签名图像
};
// 加载证书
CertificateHolder certHolder = CertificateHolder.Create(dataDir + "morzal.pfx", "aw");
// 对包含签名行的文档进行数字签名
DigitalSignatureUtil.Sign(dataDir + "SignDocuments.SignatureLine.docx",
dataDir + "SignDocuments.NewSignatureLine.docx",
certHolder, signOptions);场景 C:批量签名多个文档
string[] documents = { "doc1.docx", "doc2.docx", "doc3.docx" };
string certPath = @"C:\Cert\mycert.pfx";
string password = "your_password";
string outputDir = @"C:\SignedOutput\";
CertificateHolder certHolder = CertificateHolder.Create(certPath, password);
foreach (string docName in documents)
{
string inputPath = Path.Combine(dataDir, docName);
string outputPath = Path.Combine(outputDir, "signed_" + docName);
DigitalSignatureUtil.Sign(inputPath, outputPath, certHolder);
Console.WriteLine($"已签名: {docName}");
}方案二:Spire.Doc for .NET
Spire.Doc 是国内团队开发的高性能 Word 文档处理库,无需安装 Microsoft Office,且原生支持 WPS 格式。
步骤 1:安装 NuGet 包
Install-Package Spire.Doc
步骤 2:基础签名代码
using Spire.Doc;
namespace DigitallySignWord
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 加载 Word 文档
doc.LoadFromFile(@"C:\sample.docx");
// 指定 .pfx 证书路径和密码
string certificatePath = @"C:\cert\gary.pfx";
string password = "your_cert_password";
// 保存文档并添加数字签名
doc.SaveToFile("AddDigitalSignature.docx",
FileFormat.Docx2013,
certificatePath,
password);
}
}
}更多签名方式(SaveToStream / Sign 静态方法)
Spire.Doc 提供多种签名方式:
方式一:保存到流(SaveToStream)
Document doc = new Document("sample.docx");
FileStream fs = new FileStream("output.docx", FileMode.Create);
doc.SaveToStream(fs, FileFormat.Docx2013, "gary.pfx", "e-iceblue");
fs.Flush();方式二:静态 Sign 方法
FileStream fs = File.OpenRead("sample.docx");
byte[] result = Document.Sign(fs, "gary.pfx", "e-iceblue");
File.WriteAllBytes("AddDigitalSignature.docx", result);方案三:GroupDocs.Signature for .NET
GroupDocs.Signature 支持超过 60 种文件格式,提供了更丰富的签名选项(文本、图像、二维码、条形码等)。
步骤 1:安装 NuGet 包
dotnet add package GroupDocs.Signature
步骤 2:基础签名代码
using GroupDocs.Signature;
using GroupDocs.Signature.Options;
using (Signature signature = new Signature("input.docx"))
{
DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
{
Password = "1234567890", // 证书密码
PageNumber = 1, // 签名所在页码
Left = 50, // 距左侧距离(像素)
Top = 50, // 距顶部距离(像素)
Reason = "Document security check", // 签名原因
Contact = "John Smith", // 联系人信息
Location = "Office D.W." // 签名地点
};
SignResult result = signature.Sign("output.docx", options);
}场景 B:带可视化呈现的签名
DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
{
Password = "1234567890",
Reason = "Security issue",
Contact = "John Smith",
Location = "Office D.W.",
ImageFilePath = "signature.png", // 指定签名图像
AllPages = true, // 在所有页面上显示
VerticalAlignment = VerticalAlignment.Center, // 垂直对齐方式
HorizontalAlignment = HorizontalAlignment.Left, // 水平对齐方式
Width = 60, // 签名宽度
Height = 80, // 签名高度
Margin = new Padding() { Bottom = 10, Right = 10 }
};方案四:GemBox.Document(轻量级)
GemBox.Document 是一个轻量级的高性能库,API 设计简洁。
步骤 1:安装 NuGet 包
Install-Package GemBox.Document
步骤 2:基础签名代码
using GemBox.Document;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY"); // 免费版需要 License Key
var document = DocumentModel.Load("input.docx");
var saveOptions = new DocxSaveOptions();
saveOptions.DigitalSignatures.Add(new DocxDigitalSignatureSaveOptions()
{
CertificatePath = "certificate.pfx",
CertificatePassword = "your_password"
});
document.Save("signed_output.docx", saveOptions);
}
}方案五:Wordize(专门签名方案)
Wordize 专注于 Word 文档的数字签名功能。
using Wordize.DigitalSignatures;
CertificateHolder certificateHolder = CertificateHolder.Create("certificate.pfx", "Password");
Signer.Sign("input.docx", "output.docx", certificateHolder);各方案对比
| 方案 | 安装命令 | 核心类/方法 | 特点 |
|---|---|---|---|
| Aspose.Words | Install-Package Aspose.Words | DigitalSignatureUtil.Sign() | 功能最全,支持签名行、批量签名,稳定性高 |
| Spire.Doc | Install-Package Spire.Doc | Document.SaveToFile() | 国产库,兼容 WPS,轻量易用 |
| GroupDocs.Signature | dotnet add package GroupDocs.Signature | Signature.Sign() | 支持 60+ 种文件格式,签名类型丰富 |
| GemBox.Document | Install-Package GemBox.Document | DocxSaveOptions.DigitalSignatures | 轻量级高性能,API 简洁 |
| Wordize | 官方 SDK | Signer.Sign() | 专门针对 Word 签名,功能聚焦 |
总结
本文介绍了如何在 C# 和 VB.NET 中为 Word 文档添加数字签名。通过加载 Word 文件、指定 .pfx 数字证书及密码,并在保存文档时应用签名,即可快速实现文档的身份验证与内容保护。
数字签名不仅能够验证文档来源,还能有效防止文档在传输过程中被篡改,从而提升文档的安全性和可信度。此外,相关 API 还支持通过文件流、字节数组等多种方式进行签名,能够满足不同开发场景下的自动化办公需求。
到此这篇关于C#代码实现在Word文档中添加数字签名的文章就介绍到这了,更多相关C# Word添加数字签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#针对System.Drawing.Bitmap压缩的实现
C#中System.Drawing.Bitmap压缩可通过调整尺寸和JPEG质量实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-07-07
c# 实现IComparable、IComparer接口、Comparer类的详解
本篇文章是对c#中实现IComparable、IComparer接口、Comparer类进行了详细的分析详解,需要的朋友参考下2013-05-05


最新评论