//This method creates the public, private and secret (symmetric) keys and saves them to XML files to be used later. static void initialize() { //Generate a public/private key pair. RSACryptoServiceProvider SenderKeys = new RSACryptoServiceProvider(); //Generate a second public/private key pair. RSACryptoServiceProvider ReceiverKeys = new RSACryptoServiceProvider(); //Generate a symmetric binary key RijndaelManaged SymmetricKey = new RijndaelManaged(); SymmetricKey.KeySize = 128; SymmetricKey.BlockSize = 128; SymmetricKey.Mode = CipherMode.CBC; //Convert the keys into xml strings String SenderKeyXML = RSACryptoServiceProviderExtensions.ToXmlString(SenderKeys); String ReceiverKeyXML = RSACryptoServiceProviderExtensions.ToXmlString(ReceiverKeys); String SymmetricKeyXML = "<root><mykey>'" + Convert.ToBase64String(SymmetricKey.Key) + "'</mykey><IV>'" + Convert.ToBase64String(SymmetricKey.IV) + "'</IV></root>"; //Save the xml strings to respective files XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(SenderKeyXML); xmlDoc.Save("SenderKeys.xml"); xmlDoc.LoadXml(ReceiverKeyXML); xmlDoc.Save("ReceiverKeys.xml"); xmlDoc.LoadXml(SymmetricKeyXML); xmlDoc.Save("SymmetricKey.xml"); }
//This method loads the stored keys from the xml where they are saved static void loadKeys(RSACryptoServiceProvider SenderKeys, RSACryptoServiceProvider ReceiverKeys, RijndaelManaged SymmetricKey) { //Load all the keys XmlDocument xmlDoc = new XmlDocument(); //Sender keys xmlDoc.Load("SenderKeys.xml"); String SenderKeysXML = xmlDoc.OuterXml; RSACryptoServiceProviderExtensions.FromXmlString(SenderKeys, SenderKeysXML); //Receiver keys xmlDoc.Load("ReceiverKeys.xml"); String ReceiverKeysXML = xmlDoc.OuterXml; RSACryptoServiceProviderExtensions.FromXmlString(ReceiverKeys, ReceiverKeysXML); //Symmetric key xmlDoc.Load("SymmetricKey.xml"); string keyString = xmlDoc.FirstChild.FirstChild.InnerText; string ivString = xmlDoc.FirstChild.LastChild.InnerText; SymmetricKey.KeySize = 128; SymmetricKey.BlockSize = 128; SymmetricKey.Mode = CipherMode.CBC; SymmetricKey.Key = Convert.FromBase64String(keyString.Substring(1, keyString.Length - 2)); SymmetricKey.IV = Convert.FromBase64String(ivString.Substring(1, keyString.Length - 2)); }