我想读写密用XML文件的使用皇宫于XML。任何人都不会知道如何使用的加密算法建成的。净框架来加密流使用的XDocument对象?

我没有尝试,但你不能设定CryptoStream读写的访问。它只支持阅读或写,这皇宫的原因,以XML扔一个例外。

更新:这将是很好的阅读写的文件"飞",但我只需要阅读的加密xml文件、操纵它,然后写回了加密了。

有帮助吗?

解决方案

最简单的方法可能是XDocument.Load(),Linq,然后是XDocument.Save()。从快速测试应用程序(轻松使用非处置资源):

XDocument writeContacts = new XDocument(
   new XElement("contacts",
      new XElement("contact",
         new XElement("name", "Patrick Hines"),
         new XElement("phone", "206-555-0144",
             new XAttribute("type", "home")),
         new XElement("phone", "425-555-0145",
             new XAttribute("type", "work")),
         new XElement("address",
            new XElement("street1", "123 Main St"),
            new XElement("city", "Mercer Island"),
            new XElement("state", "WA"),
            new XElement("postal", "68042")
         )
      )
   )
);

Rijndael RijndaelAlg = Rijndael.Create();

FileStream writeStream = File.Open("data.xml", FileMode.Create);
CryptoStream cStream = new CryptoStream(writeStream,
    RijndaelAlg.CreateEncryptor(RijndaelAlg.Key, RijndaelAlg.IV),
    CryptoStreamMode.Write);

StreamWriter writer = new StreamWriter(cStream);

writeContacts.Save(writer);

writer.Flush();
writer.Close();

FileStream readStream = File.OpenRead("data.xml");

cStream = new CryptoStream(readStream,
  RijndaelAlg.CreateDecryptor(RijndaelAlg.Key, RijndaelAlg.IV),
  CryptoStreamMode.Read);

XmlTextReader reader = new XmlTextReader(cStream);

XDocument readContacts = XDocument.Load(reader);

//manipulate with Linq and Save() when needed

将您最喜爱的ICryptoTransform交换到CryptoStream。

其他提示

[更新:荣誉Corbin日,他(在同一时间)所写的相同,但是在码!]

大多数流 一种方式。我想你会需要:

  • 创建一个 CryptoStream 读取(文件等)
  • 读取的数据(例如进入 XDocument)
  • 做你的代码(阅读该文件,做出变更,等等)
  • 箱子新 CryptoStream 书面形式(文件等)[开始同IV等)
  • 保存docuemnt流

取决于什么的根本流(FileStream, MemoryStream, 等)你也可能有完全关闭/重新开放之间的阅读和写(即的 CryptoStream 可能会觉得所有权的基流和会 .Close() 它)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top