using System.Security.Cryptography;
public static void Main()
string textToEncrypt = "text to encrypt";
string keyToEncrypt = "Aesdns06";
byte[] data = Encoding.UTF8.GetBytes(textToEncrypt);
byte[] key = Encoding.UTF8.GetBytes(keyToEncrypt);
Console.WriteLine("Input : '{0}'", getString(data));
Console.WriteLine("Key : '{0}'", getString(key));
Console.WriteLine("Key bytes : [{0}]", String.Join(", ", key));
Console.WriteLine("KeySize : {0}", 256);
var encryptedKeyObj = Encrypt(getString(data), getString(key));
Console.WriteLine("Encrypted : {0}", encryptedKeyObj);
string encryptedKey = encryptedKeyObj.iv + '.' + encryptedKeyObj.encrypted;
string[] encryptedParts = encryptedKey.Split('.');
Console.WriteLine("Decrypt from Base64 with IV : '{0}'", Program.Decrypt(encryptedParts[1], keyToEncrypt, encryptedParts[0]));
private static string getString(byte[] b)
return Encoding.UTF8.GetString(b);
public static Aes GetAES(string secretKey)
var keyBytes = new byte[keysize / 8];
var secretKeyBytes = Encoding.UTF8.GetBytes(secretKey);
Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length));
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
private static byte[] Encrypt(byte[] plainBytes, Aes aes)
using (var encryptor = aes.CreateEncryptor())
using (var resultStream = new MemoryStream())
using (var aesStream = new CryptoStream(resultStream, encryptor, CryptoStreamMode.Write))
using (var plainStream = new MemoryStream(plainBytes))
plainStream.CopyTo(aesStream);
return result = resultStream.ToArray();
private static byte[] Decrypt(byte[] encryptedData, Aes aes)
return aes.CreateDecryptor()
.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
public static dynamic Encrypt(string plainText, string key)
var plainBytes = Encoding.UTF8.GetBytes(plainText);
encrypted = Convert.ToBase64String(Encrypt(plainBytes, aes)),
iv = Convert.ToBase64String(aes.IV)
public static string Decrypt(string encryptedText, string key, string iv)
var encryptedBytes = Convert.FromBase64String(encryptedText);
aes.IV = Convert.FromBase64String(iv);
return Encoding.UTF8.GetString(Decrypt(encryptedBytes, aes));