2012-08-13 61 views
1

我有一个连接到几个数据库的winforms应用程序。但是,即使用户未连接到互联网,我也希望使用我的应用。我一直在本地将数据集写入XML文件,并根据用户首选项读取它们,以确定是从数据库下载还是使用本地数据文件。从数据集中加密XML文件

DataSet.WriteXml(localPath) 

随着应用也在不断提高,我想加密的XML档案,防止用户从内部看(这里有一组数据在那里,但根据分配给用户的访问级别的应用选择性地显示数据)。我查看了'Rijndael Managed'并获得了基于Encrypt/Decrypt Files in VB.NET的原型工作。我一直无法想象如何将流传递给密码学类,而不必将它们保存到磁盘中。

现在,我xml文件出数据集保存到一个临时目录并建立一个新的流,并将它传递到CrypotoStream然后写入加密文件到所需的位置。

我正在寻找一种解决方案,直接在流中传递而无需将其写入磁盘。请建议。

+0

有DataSet.WriteXml的形式接受一个流。使用它来写入一个MemoryStream,然后将该流提供给您的加密类。您不应该使用RjindaelManged,因为它会在特定环境中生成安全警告,请改用AesManaged。 – JamieSee 2012-08-13 21:37:58

回答

2

更好的东西来使用将是EncryptedXml类

EncryptedXml Class 加密就会给加密强度,重点基地等不同的方法按照MSDN文档中的例子。这不是一个简短的实现,但它工作得非常好。

其他替代

写入到MemoryStream并使用MemoryStream.ToArray();

读取加密流

只需使用的CryptoStream加载数据集。

参阅本想读/解密 Read/decrypt encrypted XML file and then process internally