public EncryptedValue Encrypt(string value, IOutgoingLogicalMessageContext context)
{
if (string.IsNullOrEmpty(encryptionKeyIdentifier))
{
throw new InvalidOperationException("It is required to set the rijndael key identifier.");
}
AddKeyIdentifierHeader(context);
using (var rijndael = new RijndaelManaged())
{
rijndael.Key = encryptionKey;
rijndael.Mode = CipherMode.CBC;
ConfigureIV(rijndael);
using (var encryptor = rijndael.CreateEncryptor())
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
using (var writer = new StreamWriter(cryptoStream))
{
writer.Write(value);
writer.Flush();
cryptoStream.Flush();
cryptoStream.FlushFinalBlock();
return new EncryptedValue
{
EncryptedBase64Value = Convert.ToBase64String(memoryStream.ToArray()),
Base64Iv = Convert.ToBase64String(rijndael.IV)
};
}
}
}
}
}
}