资源简介

xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称加密的方法加密xml 这种加密方法只使用一个密钥,也就是说无论是加密xml还是解密xml都使用一个相同的密钥。因为这个密钥不会在被加密的xml中保存,所以我们需要在加密和解密的过程中加载这个密钥并保护它不被窃取。 2、使用对称加密和非对称加密相结合的方法来加密xml 这种方法需要一个用于加密数据的对称密钥和一个用于保护这个对称密钥的非对称密钥。被加密的对称密钥和被加密的数据一起保存在xml文档中。当用私有非对称密钥解密密钥的时候要用公开非对称密钥对密钥进行加密。 本文就将使用这种方法。想学到其他更多的方法请参看MSDN等到更多的信息。 (译者注:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。) 3、使用X.509加密xml,这种方法是用X.509作为非对称密钥,它由诸如VeriSign之类的第三方提供。 方法 不管xml加密是如何完成的,保存加密数据总是用两种方法之一。 1、加密后所有的元素都被命名为 2、加密后只有数据被替换,而元素名称仍然是可读的,不会发生变化。

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

//required for xmlDocument
using System.xml;
//required for performing RSA encryption
using System.Security.Cryptography;
//required to use Encryptedxml object requires the System.Security assembly to be referenced
using System.Security.Cryptography.xml;

/*
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 */ 

namespace xmlEncryption
{
    /// 
    /// 
    /// 

    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }


        /// 
        /// 
        /// RSA asymmetric algorithim used to encrypt the session key key is generated during the encryption process
        /// in this example a key is generated however in an actual application you will need to load and save the 
        /// keys as appropriate
        /// 
        /// 

        RSACryptoServiceProvider rsa;

        /// 
        /// 
        /// Loads the xml into an xml document and encrypts the full document from the root
        /// it does not cover selecting and encrypting individual nodes in the document
        /// however the place where this code would be placed is highlighted.
        /// 
        /// It also doesn‘t cover loading or saving the asymmetric keys 
        /// the key is created in the encrypt method and because of the way the application works the same key is used to decrypt
        /// a new key is generated every time an encyption is ran
        /// 
        /// 

        /// 
        /// 
        private void encryptToolStripMenuItem_Click(object sender EventArgs e)
        {
            //check there is xml to encrypt
            if (string.IsNullOrEmpty(this.txtxml.Text) == false)
            {
                try
                {
                    //1. load the xml in to a document full document will be encrypted
                    xmlDocument xmlDoc = new xmlDocument();
                    xmlDoc.Loadxml(this.txtxml.Text);

                    //2. Generate an asymmetric key (RSA is used) rsa object needs to have class level
                    //as it‘s used to decrypt the encrypted xml later in the class
                    rsa = new RSACryptoServiceProvider();
                    
                    //3. Select the element that will be encrypted 
                    xmlElement xmlElemt;
                    xmlElemt = xmlDoc.DocumentElement;  //at this point you could use SelectSingleNode
                    //to select a specific node to encrypt

                    //4. Encrypt the element in the document using the Encryptedxml object
                    //the Encryptedxml object is found in the System.Security.Cryptography.xml namespace
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2006-10-15 01:34  xmlEncryption\bin\
     文件        5742  2006-10-15 05:18  xmlEncryption\Form1.cs
     文件        8403  2006-10-15 02:09  xmlEncryption\Form1.Designer.cs
     文件        6213  2006-10-15 02:09  xmlEncryption\Form1.resx
     目录           0  2006-10-15 01:34  xmlEncryption\obj\
     目录           0  2006-10-15 01:34  xmlEncryption\obj\Debug\
     目录           0  2006-10-15 01:42  xmlEncryption\obj\Debug\Refactor\
     目录           0  2006-10-15 01:34  xmlEncryption\obj\Debug\TempPE\
     文件         842  2006-10-15 02:09  xmlEncryption\obj\Debug\xmlEncryption.csproj.GenerateResource.Cache
     文件       24576  2006-10-15 02:22  xmlEncryption\obj\Debug\xmlEncryption.exe
     文件         180  2006-10-15 02:09  xmlEncryption\obj\Debug\xmlEncryption.Form1.resources
     文件       26112  2006-10-15 02:22  xmlEncryption\obj\Debug\xmlEncryption.pdb
     文件         180  2006-10-15 01:38  xmlEncryption\obj\Debug\xmlEncryption.Properties.Resources.resources
     文件         310  2006-10-15 02:22  xmlEncryption\obj\xmlEncryption.csproj.FileList.txt
     文件         480  2006-10-15 01:34  xmlEncryption\Program.cs
     目录           0  2006-10-15 01:34  xmlEncryption\Properties\
     文件        1274  2006-10-15 01:34  xmlEncryption\Properties\AssemblyInfo.cs
     文件        2853  2006-10-15 01:34  xmlEncryption\Properties\Resources.Designer.cs
     文件        5612  2006-10-15 01:34  xmlEncryption\Properties\Resources.resx
     文件        1096  2006-10-15 01:34  xmlEncryption\Properties\Settings.Designer.cs
     文件         249  2006-10-15 01:34  xmlEncryption\Properties\Settings.settings
     文件        3278  2006-10-15 05:18  xmlEncryption\xmlEncryption.csproj
     目录           0  2006-10-15 01:34  xmlEncryption\

评论

共有 条评论