【问题标题】:Read/decrypt encrypted XML file and then process internally读取/解密加密的 XML 文件,然后在内部处理
【发布时间】:2012-05-19 08:38:45
【问题描述】:

我过去曾使用此代码来编写和读取 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;

【问题讨论】:

  • 内存流并入加密肯定有错误。

标签: c# xml xml-parsing encryption


【解决方案1】:

使用您当前的架构,您需要使用刚刚填充数据的 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);

【讨论】:

    【解决方案2】:

    经过多次试验和错误,我使用页面上的第一种方法指向XML element encryption。这种方法更容易和直接。如果有人决定使用它,只要确保在不同的地方进行加密和解密时使用相同的 KEY 和 IV。

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

    -Feelsgoodman

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多