繁体   English   中英

加密XmlTextWriter并将其序列化为文件的正确方法是什么?

[英]What is the proper way to encrypt an XmlTextWriter and serialize it to a file?

我有一个XmlTextWriter,它使用XmlSerializer写入文件,如下所示:

using (XmlTextWriter writer = new XmlTextWriter(path, null))
{
   writer.Formatting = Formatting.Indented;
   writer.Indentation = 3;
   MyFileObj.ourSerializer.Serialize(writer, xmlFile, ourXmlNamespaces);
}

其中“ ourSerializer”只是对System.Xml.Serialization.XmlSerializer对象的引用。 但是,我有一个实例,必须将此XML加密到磁盘上,以使最终用户无法读取其内容,而且我不确定使用现有代码进行处理的正确方法,因为在很多地方都可以调用此代码。并且不需要加密。 谁能为我提供一些见识?

另一种方法是使用CryptoStream,如下所示:

using (var fs = new FileStream(path, System.IO.FileMode.Create))
{
    using (var cs = new CryptoStream(fs, _Provider.CreateEncryptor(), CryptoStreamMode.Write))
    {
        using (var writer = XmlWriter.Create(cs))
        {

            writer.Formatting = Formatting.Indented;
            writer.Indentation = 3;
            MyFileObj.ourSerializer.Serialize(writer, xmlFile, ourXmlNamespaces);
        }
    }
}

_Provider是正确初始化的AesCryptoServiceProvider。

这是我最终解决问题的方法:

MemoryStream ms = new MemoryStream();
XmlSerializer ourSerializer.Serialize(ms, xmlFile, ourXmlNamespaces);
ms.Position = 0;
//Encrypt the memorystream
using (TextReader reader = new StreamReader(ms, Encoding.ASCII))
using (StreamWriter writer = new StreamWriter(path))
{
   string towrite = Encrypt(reader.ReadToEnd());
   writer.Write(towrite);
}

基本上将XML序列化为MemoryStream,将文本读回TextReader,对TextReader的内容进行加密,然后将生成的加密字符串保存到文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM