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); }