![]() |
Desktop Development »
Grid & Data Controls »
DataSets, DataGrids etc
Intermediate
Encrypt and decrypt DataSets to XML filesBy KoenraadThis class lib allows encrypting DataSets to XML files and reading them back. A Win Form app is included as a showcase. |
C#, XML, Windows, .NET 1.1, ADO.NET, VS.NET2003, DBA, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
XML is an easy, portable way to save DataSets within the .NET Framework. All methods to handle the XML are contained within .NET, so the end user will not need proprietary data handling software or server to read in the data.
I recently needed the ability to save encrypted DataSets to track a student's learning progress. Obviously, the XML format was too accessible to save this sort of information which needed to be kept from tampering, so I needed encryption, which comes standard with .NET. However, I was still facing a few challenges:
DataSet would not load erroneous data. I set out to develop a class library (XMLEncryptor) to encrypt and decrypt DataSets using a username and password. The challenges above were handled as follows:
The XMLEncryptor class is instantiated using two strings, a user name and password. The constructor creates the encryption key and initialization vector, as well as a 16-byte signature.
The signature, which is written as a file header without encryption, is used by the XMLEncryptor to identify files as having been encrypted using its methods. Also, the signature serves as a mask for to push the standard XML header to the 17th byte in the file, which should offer some level of protection against "guessing" the XML header (see 3 above).
The XMLEncryptor exposes two public functions, one for reading in the encrypted XML file and one for writing the DataSet back to a file:
public DataSet ReadEncryptedXML(string fileName)
public void WriteEncryptedXML(DataSet dataset, string encFileName) The ReadEncryptedXML function will return a DataSet if all goes as intended. The encrypted XML data is decrypted into a MemoryStream, which is subsequently used to load a DataSet which can then be returned to the caller without having intermediary files written to disk. If an error is encountered during reading, decryption etc., the ReadEncryptedXML function returns null.
The WriteEncryptedXML function takes the DataSet and writes it to a file using the same encryption key and IV as was used for the decryption. Once again, no temporary files are involved.
A typical use of the XMLEncryptor would be as follows:
{
XMLEncryptor XMLenc = new XMLEncryptor("myname", "mypassword");
// Load encrypted file into DataSet
DataSet myDataSet = XMLenc.ReadEncryptedXML("myfile.enc");
// test for successful read
if (myDataSet == null)
{
// Do something
return;
}
// write back the dataset
XMLEnc.WriteEncryptedXML(myDataSet, "myfile.enc");
}
That's all!
Enjoy.
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 23 Apr 2005 Editor: Smitha Vijayan |
Copyright 2005 by Koenraad Everything else Copyright © CodeProject, 1999-2009 Web15 | Advertise on the Code Project |