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