2010-07-06 30 views
0

我试图加密序列化的XML文档并将其存储在注册表中。我想知道如何做到这一点?我能够通过将XMLdoc转换为字节数组来将非序列化的XML文档存储在注册表中,但我不确定如何为序列化的XML执行此操作。如何加密序列化的XML并存储在注册表中

我的XML序列化的例子:

using System.Xml.Serialization; 

namespace Common.XMLs 
{ 
    [XmlRoot("MyDatabase")] 
    public class MyDatabase 
    { 
     [XmlElement("Item")] 
     public Items[] Item; 
    } 

    public class Items 
    { 
     [XmlElement()] 
     public string Number; 
     [XmlElement()] 
     public string Revision; 
     [XmlElement()] 
     public string DateTimeSet; 
     [XmlElement()] 
     public string User; 
    } 
} 

从这个,我会使用XML序列化和反序列化读取和写入文件,但这个是不会到一个文件,我需要对它进行加密并将其存储在注册表中。

+0

请清楚你所说的“序列化XML”的意思,并说明为什么你不能将其转换为字节数组。 – 2010-07-06 18:10:55

+0

使用创建的类创建/编辑XML文档,而不是使用通用的System.Xml类 – dangerisgo 2010-07-06 19:02:57

+0

请显示您用于序列化XML的代码。 – 2010-07-06 20:18:00

回答

0

既然你的XML文件的字节数组,它很容易:

public static byte[] EncryptBytes(byte[] toEncrypt, byte[] key, byte[] IV) 
{ 
    using (RijndaelManaged RMCrypto = new RijndaelManaged()) 
    using (MemoryStream ms = new MemoryStream()) 
    using (ICryptoTransform encryptor = RMCrypto.CreateEncryptor(key, IV)) 
    using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) 
    { 
     cs.Write(toEncrypt, 0, toEncrypt.Length); 
     cs.FlushFinalBlock(); 
     return ms.ToArray(); 
    } 
} 

public static byte[] DecryptBytes(byte[] toDecrypt, byte[] key, byte[] IV) 
{ 
    using (RijndaelManaged RMCrypto = new RijndaelManaged()) 
    using (MemoryStream ms = new MemoryStream()) 
    using (ICryptoTransform decryptor = RMCrypto.CreateDecryptor(key, IV)) 
    using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write)) 
    { 
     cs.Write(toDecrypt, 0, toDecrypt.Length); 
     cs.FlushFinalBlock(); 
     return ms.ToArray(); 
    } 
} 
+0

这就是我对XML文档的要求,但我正在寻找加密和存储序列化XML,而不是标准XML文档。 – dangerisgo 2010-07-06 18:49:34

+0

请解释一下“序列化XML”是什么......如果你有一个字节数组,它将加密它并解密它。 – 2010-07-06 19:21:39

+0

使用创建的类来创建/编辑XML文档而不是使用泛型System.Xml类 – dangerisgo 2010-07-06 19:34:06

相关问题