Ejemplo n.º 1
0
        private Message Decrypt(SecureMessageContainer container)
        {
            Message msg = null;

            RijndaelManaged rmCrypto = new RijndaelManaged();

            byte[] key = KeyProvider.Decrypt(Convert.FromBase64String(container.EncryptedKey));
            byte[] iv  = KeyProvider.Decrypt(Convert.FromBase64String(container.EncryptedIV));

            using (MemoryStream encrypted = new MemoryStream(Convert.FromBase64String(container.EncryptedData)))
                using (CryptoStream cs = new CryptoStream(encrypted, rmCrypto.CreateDecryptor(key, iv), CryptoStreamMode.Read))
                {
                    byte[] buffer = new byte[encrypted.Length];

                    int bytesRead = cs.Read(buffer, 0, (int)encrypted.Length);

                    using (MemoryStream decrypted = new MemoryStream(bytesRead))
                    {
                        decrypted.Write(buffer, 0, bytesRead);
                        decrypted.Position = 0;

                        DataContractSerializer serializer = new DataContractSerializer(typeof(Message));
                        msg = (Message)serializer.ReadObject(decrypted);
                    }
                }

            return(msg);
        }