2014-02-28 141 views
0

我有2种方法,如下所示,读取和写入我的XML文件。加密XML文件并允许从我的代码读取/写入最简单的方法是什么?读取和写入XML

读取XML文件

XmlSerializer SerializerObj = new XmlSerializer(typeof(List<ItemsUnderControlObject>)); 
// Create a new file stream for reading the XML file 
FileStream ReadFileStream = new FileStream(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location.ToString()) + @"\itemlist.xml", FileMode.Open, FileAccess.Read, FileShare.Read); 

// Load the object saved above by using the Deserialize function 
MyGlobals.ListOfItemsToControl = (List<ItemsUnderControlObject>)SerializerObj.Deserialize(ReadFileStream); 
// Cleanup 
ReadFileStream.Close(); 

写XML文件

// Create a new XmlSerializer instance with the type of the test class 
XmlSerializer SerializerObj = new XmlSerializer(typeof(List<ItemsUnderControlObject>)); 
// Create a new file stream to write the serialized object to a file 
TextWriter WriteFileStream = new StreamWriter(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location.ToString()) + @"\itemlist.xml"); 
SerializerObj.Serialize(WriteFileStream, MyGlobals.ListOfItemsToControl); 
WriteFileStream.Close(); 
+0

看看这个http://srinivasganaparthi.blogspot.com/2011/04/encrypt-and-decrypt-xml-file-in-c.html –

回答

1

查找到System.Security.Cryptography命名空间提供了一堆,让您加密/解密类。许多人会用流来解密/解密,所以只需将你的WriteFileStream/ReadFileStream实例传递给一个加密类,然后就可以完成了。

以下示例部分基于example in MSDN关于设置AES加密提供程序(并且可以适用于其他加密算法)。它需要一些初始化代码,这取决于你的实现 - see example那里。

 using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider()) 
     { 
      aesAlg.Key = Key; 
      aesAlg.IV = IV; 

      // Create a decrytor to perform the stream transform. 
      ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); 

      // Create the streams used for encryption. 
      using (Stream msEncrypt = new FileStream(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location.ToString()) + @"\itemlist.xml")) 
      { 
       using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 
       { 
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 
        { 
         // Create a new XmlSerializer instance with the type of the test class 
         XmlSerializer SerializerObj = new XmlSerializer(typeof(List<ItemsUnderControlObject>)); 
         // Create a new file stream to write the serialized object to a file 
         SerializerObj.Serialize(swEncrypt, MyGlobals.ListOfItemsToControl); 
        } 
       } 
      } 
     } 
  • 代码是尽力而为 - 别有意味的时刻来构建它。所以可能需要一点TLC ...但应该给出一个相当不错的主意。
+0

我要加密MyGlobals.ListOfItemsToControl - 这是可能吗? – user1438082

+1

是的。使用上述命名空间中的一个类创建加密流,并将WriteFileStream传递给它。 – LB2

+0

您能否根据我上面的代码给出一个如何做到这一点的代码示例? – user1438082