当前位置: 主页 > 编程知识 > net编程 > ASP.NET如何实现XML的加密和解密的方法

ASP.NET如何实现XML的加密和解密的方法

时间:2010-5-7来源:站长资讯网 点击:

使用.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 加密 解密
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言