Example #1
0
        //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");
        }
Example #2
0
        //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));
        }