Vignesh Kumar

Vignesh Kumar

  • NA
  • 1k
  • 418.3k

Encrypt xml elements before save

Oct 25 2016 3:17 AM

Hi,

I am trying to encrypt XML elements before saving.

Below is the code to get values and save.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("../../Info.xml");
XmlElement ParentElement = xmlDoc.CreateElement("Details");
XmlElement userID = xmlDoc.CreateElement("ID");
userID.InnerText = strName;
XmlElement userPwd = xmlDoc.CreateElement("Pwd");
userPwd.InnerText = strPwd;
XmlElement startDate = xmlDoc.CreateElement("Start");
startDate.InnerText = dtStart.ToString();
XmlElement expiryDate = xmlDoc.CreateElement("Expiry");
expiryDate.InnerText = dtExpiry.ToString();
ParentElement.AppendChild(userID);
ParentElement.AppendChild(userPwd);
ParentElement.AppendChild(startDate);
ParentElement.AppendChild(expiryDate);
xmlDoc.DocumentElement.AppendChild(ParentElement);
xmlDoc.Save("../../Info.xml");

Now I have a private string (code shown below) which can encrypt the inner xml contents before save

private string Encrypt(string clearText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}

I am passing the innerxml contents(shown below) and `clearText` string encrypts the contents.

Encrypt(xmlUserDoc.InnerXml);

Now how can I save those encrypted contents to the xml file?


Answers (1)