C#怎么加密XML文件中的部分节点 EncryptedXml用法

星降

星降

2025-12-30

206人浏览

原创

使用encryptedxml加密xml指定节点是.net标准做法:先定位目标节点,用encryptdata加密其innerxml,再用replaceelement替换为结构。

c#怎么加密xml文件中的部分节点 encryptedxml用法

使用 EncryptedXml 加密 XML 文件中**指定节点**(而非整个文档)是 .NET 提供的标准做法,核心在于:先定位目标 XmlNode,用 EncryptedXml.EncryptData 加密其内部内容(如 InnerXml),再用 EncryptedXml.ReplaceElement 将原节点替换成 <encrypteddata></encrypteddata> 结构。

1. 准备密钥和待加密的 XML 节点

必须有对称密钥(如 Aes)或非对称密钥(如 RSA)。加密部分节点通常推荐用对称密钥——效率高、适合加密数据块。确保密钥安全保管,不要硬编码。

  • 创建 Aes 实例并生成随机密钥/IV(用于后续加密)
  • 加载 XML 文档,用 XPath 或 GetElementsByTagName 定位要加密的节点(例如 <creditcardnumber></creditcardnumber>
  • 注意:该节点不能是文档根节点(EncryptedXml 不支持直接加密 DocumentElement)

2. 加密节点内容并生成 EncryptedData 元素

调用 EncryptedXml.EncryptData 对节点的 InnerXml 字节进行加密,返回加密后的字节数组;再用 EncryptedXml.CreateEncryptedDataEncryptKey 包装密钥(若需密钥加密),最终构造出标准的 <encrypteddata></encrypteddata> 元素。

Android编码规范 中文WORD版
Android编码规范 中文WORD版

本书讲述的是Android编码规范;有需要的朋友可以下载看看

下载
  • 示例关键步骤:
      byte[] encryptedBytes = encryptedXml.EncryptData(targetNode, aes, false);
      EncryptedData ed = new EncryptedData();
      ed.Type = EncryptedXml.XmlEncElementUrl;
      ed.Id = "EncryptedNode1";
      ed.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256Url);
      ed.CipherData.CipherValue = encryptedBytes;
  • 若用 RSA 加密会话密钥,需额外调用 encryptedXml.EncryptKey 并设置 ed.KeyInfo

3. 替换原节点并保存结果

调用 EncryptedXml.ReplaceElement(targetNode, ed, aes) —— 这一步会自动把原节点替换成 <encrypteddata></encrypteddata>,同时将密钥信息(如 <encryptedkey></encryptedkey>)注入到父级或指定位置(取决于参数)。

  • 替换后,原节点从 DOM 中移除,<encrypteddata></encrypteddata> 成为其父节点的子节点
  • 调用 xmlDoc.Save("out.xml") 即可持久化含加密片段的 XML
  • 解密时用相同密钥和 EncryptedXml.DecryptDocument() 可全自动还原所有 <encrypteddata></encrypteddata> 节点

4. 注意事项与常见问题

加密后 XML 仍保持格式良好,但内容不可读;实际应用中需关注密钥分发、IV 管理和签名配合(防篡改)。

  • 不要加密空节点或只含空白文本的节点——EncryptData 可能抛出异常
  • 加密前建议规范化节点(如 targetNode.Normalize()),避免因文本节点拆分导致加密不完整
  • 若 XML 含命名空间,务必在加载时保留 XmlNameTable,否则 EncryptedXml 解密可能失败
  • 调试时可用 EncryptedXml.GetDecryptionKey 自定义密钥解析逻辑(如从证书或配置读取)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

node 常见问题 字节 c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.01

2758

5

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2024.08.01

3316

7

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2024.11.28

1772

7

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

6230

7

火山引擎API Key获取教程
火山引擎API Key获取教程

火山引擎API Key适合需要调用火山引擎云服务、AI模型、火山方舟接口或其他开放能力的开发者参考。本专题整理控制台入口、账号认证、服务开通、API Key创建、密钥复制保存、权限检查、调用测试和Key无效等常见问题排查。

2026.08.04

0

10

火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

2

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

0

10

火山引擎控制台操作教程
火山引擎控制台操作教程

火山引擎控制台中常用功能包括API密钥管理、模型调用配置、云资源查看、账单明细、用量统计和权限分配。本专题整理控制台基础操作、服务开通流程、Key创建与保存、费用消耗查看、子账号权限设置和调用失败排查,方便开发者完成日常管理。

2026.08.04

1

10

PDF与PPT格式转换操作方法及在线转换技巧
PDF与PPT格式转换操作方法及在线转换技巧

本专题聚焦 PDF 与 PPT 文件格式转换需求,整理 PDF 转 PPT 在线转换方法、PPT 批量转换 PDF 操作步骤、转换后格式错乱处理以及文档版式检查技巧。通过详细教程帮助用户掌握 PDF、PPT 双向转换方法,解决演示文稿制作、文件整理和办公格式转换中的常见问题,提高办公效率。

2026.07.31

112

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 9.6万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 25.8万人学习