XML Encryption支持对XML文档中部分元素或内容进行选择性加密,通过Type属性(Element/Content)和ReferenceList指定目标,利用Id或XPath精确定位节点,保持文档结构完整与明密文共存,并需妥善管理密钥及KeyInfo。

指定加密目标:用 ReferenceList 或 Type 属性定位内容
XML 加密通过 元素内的 Id、Type 和可选的 ReferenceList 明确指出要加密的是什么:
• Type="http://www.w3.org/2001/04/xmlenc#Element" 表示加密整个 XML 元素(含标签和子内容);
• Type="http://www.w3.org/2001/04/xmlenc#Content" 表示只加密元素的文本内容(不含标签);
• ReferenceList 可引用多个 ,实现一对多加密(例如同时加密多个 节点)。
用 xpath 或 id 引用 精确选取节点
实际加密前需先识别目标节点:
• 推荐为待加密元素添加唯一 Id 属性(如 ),然后在 中用 关联;
• 也可使用 XPath 表达式(需在 中声明),但要注意 XPath 处理上下文和命名空间兼容性,生产环境更倾向用 Id 引用避免歧义。
保持文档结构与混合明密文共存
加密后,原始节点会被替换成 ,其他未加密内容保持原样:
• 整个 XML 仍可被解析、验证签名(只要签名范围不覆盖已加密区域);
• 解密方只需识别 并按其 EncryptionMethod 和 KeyInfo 还原文本;
• 示例:一个订单 XML 中, 和 明文可见,仅 被加密成 —— 结构不变,语义清晰。
注意密钥管理与上下文安全
部分加密不降低密钥保护要求:
• 若用对称密钥(如 AES),密钥本身通常封装在 中,用接收方公钥加密;
• 必须随 一同传输,否则无法解密;
• 避免在明文部分泄露加密逻辑线索(例如不要用明文字段名暗示“此字段已被加密”)。










