【发布时间】:2020-04-03 07:12:48
【问题描述】:
如何编写一个 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);
}
}
}
上面的代码显示了序列化代码,省略了反序列化,因为我认为不需要它来解决问题。
那么如何在反序列化之前编写加密和解密文件?加密/解密应该发生在内存中(我不想先写一个未加密的文件然后读回加密它)
编辑:“加密”是指在不知道如何解密的情况下,文件不应该是人类可读或可被其他程序解析的(对称密钥)
【问题讨论】:
-
一旦你弄清楚“加密”是什么意思,你应该能够找到实现它的流并使用类似于压缩的代码,如stackoverflow.com/questions/18212311/c-sharp-xml-compression。在当前状态下,帖子无法真正回答 - 请edit 澄清您正在寻找什么样的加密(最好指向 C#/.Net 实现)。
标签: c# encryption serialization xmlserializer ixmlserializable