使用IXmlSerializable(c#)时的加密XML文件

问题描述 投票:0回答:1

如何编写使用IXmlSerializable以加密方式序列化到的XML文件?

我将我的数据(反序列化我的数据(包含文件节点的节点的结构,就像文件系统文件夹一样)成一个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);
            }
        }
}

上面的代码显示了序列化代码,反序列化被省略了,因为我认为不需要它来解决问题。

那么,如何在反序列化之前将文件加密并解密?加密/解密应该在内存中进行(我不想先写一个未加密的文件再读回去进行加密)

编辑:“加密”是指该文件在不知道如何解密(对称密钥)的情况下不应为其他程序所可读或可解析。

如何编写使用IXmlSerializable以加密方式序列化到的XML文件?我将数据(像文件系统文件夹一样包含节点结点的节点结构)数据反序列化为xml -...

c# encryption serialization xmlserializer ixmlserializable
1个回答
0
投票

要实现完全加密,请将CryptoStream实例传递给XmlSerializer。

© www.soinside.com 2019 - 2024. All rights reserved.