.net - 如何使用 LINQ to XML 读取/写入加密的 XML 文件?

标签 .net xml linq encryption linq-to-xml

我想使用 LINQ to XML 读取/写入加密的 XML 文件。有谁知道如何使用 .NET Framework 内置的加密算法来加密 XDocument 对象使用的流?

我试过了,但是你不能将 CryptoStream 设置为读/写访问。它只支持读取或写入,这会导致 LINQ to 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。

关于.net - 如何使用 LINQ to XML 读取/写入加密的 XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267451/

相关文章:

android - XML 中查看动画的引用自定义插值器

c# - JToken 上的 LINQ where 查询

c# - WebBrowser Control .NET - 与此控件交互的预期方式是什么?

.net - 如何使用 nhibernate 更快地插入?

xml - 我什至没有任何AS3代码?

java - 使用 SimpleXml 将 Xml 解析为 Java

c# - 在 .NET WinForms 中创建自定义菜单

c# - 在部署到 Azure 的 Web 应用程序中确定登录用户是否是 AD 组的成员

c# - 在 LINQ 中,如何对来自 .Include() 的数据执行 .OrderBy()?

c# - 过滤强类型结果