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

XML 加密通过 <encrypteddata></encrypteddata> 元素内的 Id、Type 和可选的 ReferenceList 明确指出要加密的是什么:
• Type="http://www.w3.org/2001/04/xmlenc#Element" 表示加密整个 XML 元素(含标签和子内容);
• Type="http://www.w3.org/2001/04/xmlenc#Content" 表示只加密元素的文本内容(不含标签);
• ReferenceList 可引用多个 <datareference></datareference>,实现一对多加密(例如同时加密多个 <creditcardnumber></creditcardnumber> 节点)。
实际加密前需先识别目标节点:
• 推荐为待加密元素添加唯一 Id 属性(如 <ssn id="ssn-1">123-45-6789</ssn>),然后在 <encrypteddata></encrypteddata> 中用 <encryptionproperty target="#ssn-1"></encryptionproperty> 关联;
• 也可使用 XPath 表达式(需在 <transforms></transforms> 中声明),但要注意 XPath 处理上下文和命名空间兼容性,生产环境更倾向用 Id 引用避免歧义。
加密后,原始节点会被替换成 <encrypteddata></encrypteddata>,其他未加密内容保持原样:
• 整个 XML 仍可被解析、验证签名(只要签名范围不覆盖已加密区域);
• 解密方只需识别 <encrypteddata></encrypteddata> 并按其 EncryptionMethod 和 KeyInfo 还原文本;
• 示例:一个订单 XML 中,<orderid></orderid> 和 <shippingaddress></shippingaddress> 明文可见,仅 <paymentinfo></paymentinfo> 被加密成 <encrypteddata></encrypteddata> —— 结构不变,语义清晰。
部分加密不降低密钥保护要求:
• 若用对称密钥(如 AES),密钥本身通常封装在 <encryptedkey></encryptedkey> 中,用接收方公钥加密;
• <keyinfo></keyinfo> 必须随 <encrypteddata></encrypteddata> 一同传输,否则无法解密;
• 避免在明文部分泄露加密逻辑线索(例如不要用明文字段名暗示“此字段已被加密”)。
以上就是XML加密(XML Encryption)怎么保护部分数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号