/// <summary>
        ///     Decrypts a string using the <see cref="Aes"/> algorithm.
        /// </summary>
        /// <param name="s">The string to decrypt.</param>
        /// <param name="parameters">The <see cref="AesParameters"/> structure holding the key and initialization vector.</param>
        /// <returns>Returns the decrypted <see cref="string"/>.</returns>
        public string AesDecrypt(string s, AesParameters parameters)
        {
            var transform    = aes.CreateDecryptor(parameters.AesKey, parameters.AesIV);
            var memoryStream = new MemoryStream(Convert.FromBase64String(s));
            var cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Read);
            var reader       = new StreamReader(cryptoStream);
            var decrypted    = reader.ReadToEnd();

            reader.Dispose();
            cryptoStream.Dispose();
            memoryStream.Dispose();
            transform.Dispose();

            return(decrypted);
        }
        /// <summary>
        ///     Encrypts a string using the <see cref="Aes"/> algorithm.
        /// </summary>
        /// <param name="s">The string to encrypt.</param>
        /// <param name="parameters">The <see cref="AesParameters"/> structure holding the key and initialization vector.</param>
        /// <returns>Returns the encrypted <see cref="string"/>.</returns>
        public string AesEncrypt(string s, AesParameters parameters)
        {
            var transform    = aes.CreateEncryptor(parameters.AesKey, parameters.AesIV);
            var memoryStream = new MemoryStream();

            using (var cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write)) {
                using (var writer = new StreamWriter(cryptoStream)) {
                    writer.Write(s);
                }
            }

            var encrypted = Convert.ToBase64String(memoryStream.ToArray());

            memoryStream.Dispose();
            transform.Dispose();

            return(encrypted);
        }