Как зашифровать сериализованный XML и сохранить в реестре - PullRequest
0 голосов
/ 06 июля 2010

Я пытаюсь зашифровать сериализованный документ XML и сохранить его в реестре. Мне было интересно, как это сделать? Я могу хранить несериализованный 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 для чтения и записи файла, за исключением того, что это не относится к файлу, мне нужно зашифровать его и сохранить в реестре.

Ответы [ 2 ]

0 голосов
/ 06 июля 2010

Мне нравится использовать Enterprise Library для криптографических сценариев, таких как эта, она очень полезна и снимает много накладных расходов с вашего кода.В частности, вы можете использовать алгоритм симметричного шифрования, который будет выдавать строку Base64, которую затем можно сохранить в реестре.

Проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/ff664686(v=PandP.50).aspx

0 голосов
/ 06 июля 2010

Поскольку у вас есть байтовый массив документа 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...