宝哥软件园

ASP.NET下的XML加解密实现

编辑:宝哥软件园 来源:互联网 时间:2021-10-24

介绍我们有三种加密xml的方法。1.只使用对称加密方法加密xml。这种加密方法只使用一个密钥,也就是说,加密和解密xml都使用同一个密钥。因为这个密钥不会保存在加密的xml中,所以我们需要在加密和解密的过程中加载这个密钥,并保护它不被窃取。2.通过使用对称加密和非对称加密的组合来加密xml。此方法需要用于加密数据的对称密钥和用于保护该对称密钥的非对称密钥。加密的对称密钥与加密的数据一起存储在xml文档中。当使用私有非对称密钥来解密密钥时,应该使用公共非对称密钥来加密密钥。本文将采用这种方法。如果你想学习更多的方法,请参考MSDN了解更多信息。(译者注:非对称加密算法需要两个密钥:公钥和私钥。公钥和私钥是一对。如果数据是用公钥加密的,只能用相应的私钥解密。如果数据用私钥加密,则只能用相应的公钥解密。因为加密和解密使用两种不同的密钥,所以这种算法被称为非对称加密算法。) 3.使用X.509加密xml。该方法使用X.509作为非对称密钥,由VeriSign等第三方提供。方法无论如何进行xml加密,总有两种方法来保存加密的数据。1.加密后,所有元素都被命名为EncryptedData2。加密后,只有数据被替换,但元素名称仍然可读,不会改变。这种微妙的变化非常重要。例如,如果您的xml文档包含一个名为employee的根元素,该根元素有一个名为WrittenWarning的子元素,它存储了详细的信息。如果您发送此xml并希望WrittenWarning元素受到保护,那么WrittenWarning将被第一步中的方法用EncryptedData替换,并且您将无法从加密文档中获得任何可读信息。如果使用第二种方法,WrittenWarning元素仍会保留,只有数据会被加密。任何拿到这份文件的人都不可能知道这个元素下的细节,但还是知道这个员工出事了。此外,WrittenWarning元素的所有属性都不会被加密。因此,如果没有特殊要求,我们一般采用第一种方法。英寸net 2.0中,您可以通过修改布尔值的属性来简单地选择使用哪种方法。xml加密示例下面的xml加密示例使用非对称加密方法,对xml文档的author元素下的内容进行加密,并用EncryptedData替换author元素。

可扩展置标语言文档:可扩展标记语言版本='1.0 '独立='否?中文件对象的查询. NET 1.1/标题摘要部分本文涵盖了基础知识第/摘要作者尊敬的先生./敬称名字乔治/名字姓氏詹姆斯/姓氏电子邮件[电子邮件受保护]/电子邮件/作者/articleinfo /articleXPath表达式为/文章/文章信息/作者被加密后的可扩展标记语言文档:可扩展标记语言版本='1.0 '独立='否?中文件对象的查询. NET 1.1/标题摘要部分本文涵盖了基础知识。该条不包括第/抽象加密数据类型=' http://www。w3。org/2001/04/xmlenc # Element ' xmlns=' http://www .w3。org/2001/04/xmlenc # ' EncryptionMethod Algorithm=' http://www .w3。org/2001/04/xmlenc # AES 256-CBC '/KeyInfo xmlns=' http://www .w3。org/2001元素及其子元素都将被加密数据给替换掉,另外还包括其他一些元素,如加密算法,密钥等加密数据。元素仔细看看加密数据元素的树形结构,你会发现加密数据元素下分解出了很多子元素。其中控制元素与可扩展标记语言数字签名中的控制元素是相同的

EncryptedData元素包含在“http://www . w3 . org/2001/04/xmlenc #”命名空间中。它是加密数据的根元素。EncryptionMethod元素指定加密数据的对称方法。为此,我们需要使用一个算法属性,包括w3 URL-“http://www . w3 . org/2001/04/xmlenc # AES 256-CBC”,这表明数据是由AES(Rijndael)加密的,密钥为256k。KeyInfo元素来源于xml数字签名,它保存了对称密钥的信息,并且可以保存更多的信息。KeyInfo元素下的EncryptedKey元素及其子元素包含有关保存的密钥的信息。KeyInfo下的EncryptionMethod元素包含用于加密对称密钥的非对称加密方法。为此,您需要将算法属性设置为w3 url。例如,“http://www . w3 . org/2001/04/xmlenc # rsa-1 _ 5”表示使用RSA非对称算法加密对称密钥。KeyName元素是用于发现密钥的标识符。我们稍后编程时,您会发现它的重要性。密码数据元素和密码值元素出现在包含密码数据的加密密钥元素和加密数据元素下。实际上,密码数据存储在密码值元素下。加密密钥保存在加密密钥元素下,加密数据保存在加密值元素下。非对称xml加密步骤xml加密的过程可以概括为以下五个步骤:1。在xml文档中选择一个元素(如果选择了根元素,整个文档将被加密);2.用对称密钥加密该元素;3.用非对称加密(使用公钥)加密上面的对称密钥;4.创建一个EncryptedData元素,它将包含加密数据和加密密钥;5.用加密元素替换初始元素。这些步骤中的大多数都可以使用中的类自动完成。net 2.0。非对称xml解密步骤xml解密的过程可以概括为以下四个步骤:1。在xml文档中选择一个EncryptedData元素;2.使用非对称密钥解密密钥(使用私钥);3.使用未加密的密钥解密数据;4.用未加密的元素替换EncryptedData元素。这些步骤中的大多数都可以通过使用中的类自动完成。net 2.0。命名空间为了加密xml,我们需要引入三个命名空间系统。Xml类系统.安全性.包含操作的加密技术xml类系统.安全性.加密技术.包含加密密钥生成的xml-使用加密XML的类。净。本文提供了一个加密和解密xml的简单应用程序。我们来看看相关的代码。这个例子只有一些基本功能。您可以添加一些附加功能,例如选择节点。首先,加载非对称公钥来加密密钥。//创建非对称密钥RSA ryptoserviceprovider RSA=new RSA ryptoserviceprovider()用于加密密钥。//加载公钥xmldocumentubkeys=new xmldocument();pubKeys。加载(应用程序。StartupPath ' XML . dev . keys . public ');//使用公钥加密密钥RSA . from xmlstring(pubkeys . outxml);接下来,加载xml文档并选择要加密的节点。下面的代码示例演示如何使用XPath表达式选择节点。如果不选择节点,整个xml文档将被加密。

//XML document this . xmlencdoc=new XMl document();//将部分节点和数据加载到xml文档中(省略)XmlElement encElement//如果没有xpath,则为if(XPath==string . empty){ en element=this . XML encdoc . document element;} else { XmlNamespaceManager xmlns=this . xmlcntlr . xmlnsmanager;//通过XPath en element=this . XML encdoc . selectsing node(XPath,xmlns)选择要加密的元素作为xmlelement}使用EncryptedXml类加密数据和密钥//完成加密的Xml类加密的XML enc=新的加密的XMl(this . XMl enc doc);//添加一个“session”密钥,使用rsa对xmlenc . addkeynamemapping(' session ',RSA)进行编码;//使用“会话”密钥加密数据。//这些信息保存在KeyInfo元素下。encrypted data=xmlenc . encrypt(en element,' session ');用加密元素替换初始元素//用加密元素替换初始元素encrypted XML . Replace element(encelement,encdata,false);使用。net解密xml。首先加载私有非对称密钥来解密密钥。//创建非对称密钥RSA ryptoserviceprovider RSA=new RSA ryptoserviceprovider();//加载私钥XML document priv keys=new XML document();privKeys。加载(应用程序。StartupPath ' XML . dev . keys . private ');//使用私钥解密密钥RSA . from xmlstring(priv keys . outxml);添加密钥名并将其映射到加密文档。//添加密钥名并将其映射到加密文档。加密XML encxml=新的加密XML(XML enc doc);encXml。AddKeyNameMapping('session ',RSA);通过指定的密钥解密文档的每个加密数据元素//解密EncryptedData元素encXml。DecryptDocument();Xml加密是加密xml的w3c标准。加密文档仍然是xml格式。我们使用非对称和对称算法加密xml,对称算法用于加密数据,非对称算法用于加密对称算法中的密钥,EncryptedData存储在Encrypted Data元素下。EncryptedData元素包含一些描述算法子元素的列,还包含关键信息。

更多资讯
游戏推荐
更多+