using System.Security.Cryptography;
using System.Threading.Tasks;
public class AesCryptographer
private readonly string _key;
public AesCryptographer(string key)
public async Task<string> Decrypt(string encryptedValue)
using var rijndael = FactoryRijndael(_key);
using var memoryStream = new MemoryStream(Convert.FromBase64String(encryptedValue));
using var cryptoStream = new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read);
using var streamReader = new StreamReader(cryptoStream);
return await streamReader.ReadToEndAsync();
Console.WriteLine("An AES cryptographic error occurred: "+ ex.Message);
public async Task<string> Encrypt(string value, string key = null)
using (var rijndael = FactoryRijndael(_key))
using (var memoryStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
using (var streamWriter = new StreamWriter(cryptoStream))
await streamWriter.WriteAsync(value);
return Convert.ToBase64String(memoryStream.ToArray());
Console.WriteLine("An AES cryptographic error occurred: "+ ex.Message);
private static RijndaelManaged FactoryRijndael(string key)
return new RijndaelManaged {
Key = Convert.FromBase64String(key),
public static void Main()
var key = "MTIzNDU2Nzg5MDEyMzQ1NjEyMzQ1Njc4OTAxMjM0NTY=";
var aesCryptographer = new AesCryptographer(key);
Console.WriteLine("Escreva o conteudo a ser criptografado:");
string valueToEncrypt = @Console.ReadLine();
Console.WriteLine("Valor criptografado");
Console.WriteLine(aesCryptographer.Encrypt(valueToEncrypt).GetAwaiter().GetResult());