public XElement RemoveElementBehavior(XElement element)
        {
            var value = element.Element(XName.Get("Value", "string"));
            if (value == null)
                throw new ArgumentException("element must contain <value> element");

            var attribute = value.Attribute("iv");
            if (attribute == null)
                throw new ArgumentException("element must contain a <value> element with iv attribute");

            var encryptedValue = new EncryptedValue
            {
                Base64Iv = attribute.Value,
                EncryptedBase64Value = element.Value,
            };
            var unencryptedValue = EncryptionService.Decrypt(encryptedValue);
            return XElement.Parse(unencryptedValue);
        }
		public string Decrypt(EncryptedValue encryptedValue)
		{
			var encrypted = Convert.FromBase64String(encryptedValue.EncryptedBase64Value);
			using (var rijndael = new RijndaelManaged())
			{
				rijndael.Key = Key;
				rijndael.IV = Convert.FromBase64String(encryptedValue.Base64Iv);
				rijndael.Mode = CipherMode.CBC;

				using (var decryptor = rijndael.CreateDecryptor())
				using (var memoryStream = new MemoryStream(encrypted))
				using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
				using (var reader = new StreamReader(cryptoStream))
				{
					return reader.ReadToEnd();
				}
			}
		}