You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C#通过Open XML格式为Word文档添加数字签名的方案求助

OpenXML 生成Word文档添加数字签名实现方案

前置依赖

  • 项目需安装NuGet包 DocumentFormat.OpenXml(推荐2.12及以上稳定版本)
  • 提前准备好PFX格式的代码签名证书(需包含私钥,生产环境建议使用CA机构颁发的正规证书,测试可使用自签名证书)

核心实现代码(C#示例)

无需依赖Microsoft.Office.Interop组件,直接基于OpenXML规范对docx包进行签名:

using DocumentFormat.OpenXml.Packaging;
using System.IO.Packaging;
using System.Security.Cryptography.X509Certificates;

/// <summary>
/// 为已生成的Word文档添加数字签名
/// </summary>
/// <param name="docxFilePath">待签名的Word文档路径</param>
/// <param name="pfxCertPath">PFX格式证书路径</param>
/// <param name="certPassword">证书私钥密码</param>
public void AddDigitalSignatureToWord(string docxFilePath, string pfxCertPath, string certPassword)
{
    // 加载待签名的Word文档
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(docxFilePath, true))
    {
        Package package = wordDoc.Package;
        PackageDigitalSignatureManager signatureManager = new PackageDigitalSignatureManager(package);
        
        // 使用Office支持的签名算法
        signatureManager.HashAlgorithm = "http://www.w3.org/2001/04/xmlenc#sha256";
        
        // 加载证书
        X509Certificate2 cert = new X509Certificate2(pfxCertPath, certPassword, X509KeyStorageFlags.Exportable);
        
        // 对整个文档包的所有部件进行签名
        List<Uri> partsToSign = signatureManager.GetPartsToSign();
        signatureManager.Sign(partsToSign, cert);
    }
}

补充说明

  • 如果需要在文档末尾显示可视化的签名效果,可以在调用上述签名方法前,先通过OpenXML API在文档末尾插入签名行内容控件,签名完成后Office打开文档时会自动将签名信息关联到签名行展示
  • 签名完成后任何对文档内容的修改都会导致签名失效,符合Office数字签名的常规校验逻辑
  • 自签名证书在未安装根证书的设备上会提示签名不受信任,仅可用于测试环境

内容的提问来源于stack exchange,提问作者Ruben Charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:57:00