我想使用LINQ to XML讀取/寫入加密的XML文件。有誰知道如何使用.NET Framework中內置的加密算法來加密XDocument對象使用的Stream?如何使用LINQ to XML讀取/寫入加密的XML文件?
我確實嘗試過,但無法將CryptoStream設置爲讀/寫訪問。它只支持讀取或寫入,這會導致LINQ to XML拋出異常。
更新:這將是很好的讀/寫文件「即時」,但我只需要讀取加密的XML文件,操縱它,然後再寫回去加密。
我想使用LINQ to XML讀取/寫入加密的XML文件。有誰知道如何使用.NET Framework中內置的加密算法來加密XDocument對象使用的Stream?如何使用LINQ to XML讀取/寫入加密的XML文件?
我確實嘗試過,但無法將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的。
我試着用AesManaged類來做這個加密,而且它錯誤,因爲它想讀取/寫入數據流。嗯...我會再試一次。謝謝。 – 2008-11-06 21:30:11
[更新:榮譽給科爾賓三月,誰(在同一時間)寫的一樣,但在代碼]
大部分流是的一種方式。我想你必須:
CryptoStream
從(文件等)XDocument
)CryptoStream
寫入到(文件等)[用相同的IV等)開始根據底層數據流是什麼(FileStream
,MemoryStream
等),你可能也必須在讀和寫之間完全關閉/重新打開它。 CryptoStream
可能會感受到基本流的所有權,並且會.Close()
it)。
你能澄清你想要做什麼嗎?將整個文檔讀入內存,對其進行操作,然後再將其寫出來 - 或者您需要能夠隨時讀/寫嗎? – tvanfosson 2008-11-06 02:24:18