读取/解密加密的 XML 文件,然后在内部进行处理

本文关键字:在内部 然后 处理 文件 解密 加密 XML 读取 | 更新日期: 2023-09-27 18:33:43

我过去曾使用此代码来编写和读取xml文件。这次我想编写一些加密的生成XML,然后在内部读取和处理它。我会发布代码,也许有人可以发现问题。

当我测试解密时,我已经能够输出一个具有连续空字符代码行的文件。加密文件似乎包含数据,并且大小随不同数据量而变化。

请帮忙,谢谢!

加密

MemoryStream ms = new MemoryStream();
XmlTextWriter xmlwriter = new XmlTextWriter(ms,Encoding.UTF8);
FileStream EncryptedFileStream = new FileStream(file, FileMode.Create, FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes("AAAAAAAA");
DES.IV = ASCIIEncoding.ASCII.GetBytes("AAAAAAAA");
ICryptoTransform desEncrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(EncryptedFileStream, desEncrypt, CryptoStreamMode.Write);
/*create working and tested XML data here*/

byte[] bytearray = new byte[ms.Length];

ms.Read(bytearray, 0, bytearray.Length);
cryptostream.Write(bytearray, 0, bytearray.Length);
cryptostream.Close();
EncryptedFileStream.Close();
xmlwriter.Close();
ms.Flush();
ms.Close();

解密

MemoryStream ms = new MemoryStream();
StreamWriter swDecrypt = new StreamWriter(ms);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes("AAAAAAAA");
DES.IV = ASCIIEncoding.ASCII.GetBytes("AAAAAAAA");
ICryptoTransform desDecrypt = DES.CreateDecryptor();
FileStream fsDecrypt = new FileStream(mstrIndexFile, FileMode.Open, FileAccess.Read);
CryptoStream cryptostreamDecr = new CryptoStream(fsDecrypt, desDecrypt, CryptoStreamMode.Read);
swDecrypt.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
swDecrypt.Flush();
ms.Position = 0;

读取/解密加密的 XML 文件,然后在内部进行处理

使用您当前的架构,您需要使用刚刚填充数据的 MemoryStream(不要忘记将其位置重置为零并刷新任何挂起的写入)

//I am currently stuck on this point.
swDecrypt.Flush();
ms.Position=0;
XmlTextReader lxmlReader = new XmlTextReader(ms);

但是,我的感觉是你在这里不需要MemoryStream。相反,只需将CryptoStream提供给XmlTextReader:

CryptoStream cryptostreamDecr = new CryptoStream(.....
XmlTextReader lxmlReader = new XmlTextReader(cryptostreamDecr);

经过多次试验和错误,我被指出使用页面上的第一种方法进行XML元素加密。这种方法要容易得多,也直接得多。如果有人决定使用它,请确保在加密和解密上使用相同的 KEY 和 IV,如果它们发生在不同的地方。

基本上,复制粘贴操作,您可以通过传入根元素来加密整个文档!

-感觉古德曼