Как я могу написать XML-файл, который я сериализую с помощью IXmlSerializable в зашифрованном виде?
Я (де-) сериализую свои данные (структуру узлов, содержащих узлы, как папки файловой системы) в xml-файл:
public class DataNodeCollection : List<DataNode>, IXmlSerializable
{
internal void Serialize()
{
string sFilename = getFilename();
using (var writer = new StreamWriter(sFilename, false, Encoding.Unicode))
{
var serializer = new XmlSerializer(this.GetType(), new XmlRootAttribute("SystemNodes"));
serializer.Serialize(writer, this);
writer.Flush();
}
}
public void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("FileFormatVersion", CurrentFormatVersion.ToString(CultureInfo.InvariantCulture));
foreach (DataNode elem in this)
{
var innerSerializer = new XmlSerializer(typeof(DataNode), new XmlRootAttribute(elem.Name));
innerSerializer.Serialize(writer, elem);
}
}
}
public class DataNode : IXmlSerializable
{
private IDictionary<string, string> _mapAttributes = new Dictionary<string, string>();
private IList<DataNode> _subNodes = new List<DataNode>();
public string Name { get; protected set; }
public void WriteXmlXmlWriter writer)
{
foreach (string sKey in _mapAttributes.Keys)
{
writer.WriteAttributeString(sKey, _mapAttributes[sKey]);
}
foreach (DataNode node in _subNodes)
{
var innerSerializer = new XmlSerializer(typeof(DataNode), new XmlRootAttribute(node.Name));
innerSerializer.Serialize(writer, node);
}
}
}
В приведенном выше коде показан код сериализации, десериализация опущена, потому что я не думаю, что это необходимо для решения проблемы.
Итак, как я могу записать файл в зашифрованном виде и расшифровать его перед десериализацией? Шифрование/дешифрование должно происходить в памяти (я не хочу сначала записывать незашифрованный файл и читать его, чтобы зашифровать)
изменить: под «шифрованием» я имею в виду, что файл не должен быть удобочитаемым или анализируемым другими программами, не зная, как его расшифровать (симметричный ключ)