使用.net加密xml
本文提供了一个简单的加密、解密xml的应用程序,下面我们一起来看一看相关的代码。这个示例只有一些基本功能,你可以再额外加一些如选择节点之类的功能
首先加载非对称公开密钥来加密密钥
// 创建一个用于加密密钥的非对称密钥 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); // 加载一个公开密钥 XmlDocument pubKeys = new XmlDocument(); pubKeys.Load(Application.StartupPath + "\\xml.dev.keys.public"); // 使用公开密钥加密密钥 rsa.FromXmlString(pubKeys.OuterXml); |
接下来加载xml文档并选择一个需要加密的节点。下面的代码示例了如何使用一个XPath表达式来选择节点。如果不选择节点,则整个xml文档都将被加密。
// xml文档 this.xmlEncDoc = new XmlDocument(); // 给xml文档加载一些节点和数据(省略) XmlElement encElement; // 如果没有xpath则 if (xpath == string.Empty) { encElement = this.xmlEncDoc.DocumentElement; } else { XmlNamespaceManager xmlns = this.xmlCntrlr.xmlnsManager; // 通过xpath选择出需要加密的元素 encElement = this.xmlEncDoc.SelectSingleNode(xpath, xmlns) as XmlElement; } |
使用EncryptedXml类去加密数据和密钥
// 完成加密xml的类 EncryptedXml xmlEnc = new EncryptedXml(this.xmlEncDoc); // 增加一个“session”密钥,使用rsa编码 xmlEnc.AddKeyNameMapping("session", rsa); // 使用“session”密钥来加密数据 // 这些信息被保存在KeyInfo元素下 EncryptedData encData = xmlEnc.Encrypt(encElement, "session"); |
用加密后的元素替换初始元素
// 用加密后的元素替换初始元素 EncryptedXml.ReplaceElement(encElement, encData, false); |
使用.net解密xml
首先加载私有非对称密钥来解密密钥
// 创建一个用于解密密钥的非对称密钥 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); // 加载私有密钥 XmlDocument privKeys = new XmlDocument(); privKeys.Load(Application.StartupPath + "\\xml.dev.keys.private"); // 使用私有密钥来解密密钥 rsa.FromXmlString(privKeys.OuterXml); 增加一个密钥名称并映射到被加密的文档中 // 增加一个密钥名称并映射到被加密的文档中 EncryptedXml encXml = new EncryptedXml(xmlEncDoc); encXml.AddKeyNameMapping("session", rsa); 通过指定的密钥来解密文档的每一个EncryptedData元素 // 解密所有<EncryptedData>元素 encXml.DecryptDocument(); |
总结
xml加密(XML Encryption)是w3c加密xml的标准。加密后的文档仍然是xml格式。我们使用非对称和对称算法来加密xml,对称算法用于加密数据,非对称算法用于加密对称算法中的密钥,加密后的数据被保存在EncryptedData元素下。EncryptedData元素包含着一些列用于描述算法的子元素,同时也包含着密钥信息。
.
分页: [1] [2] [3]
TAG: ASP.NET XML 加密 解密