using System.Security.Cryptography;
private static byte[] _salt = new byte[32];
private static String _secret = "fgT45sd7";
static void Main(string[] args)
_salt = Encoding.ASCII.GetBytes("o6806642kbM7c5");
string text = "IE29AIBK93115212345678";
Console.WriteLine($"Starting text: {text}");
string encryptedText = EncryptStringAES(text, _secret);
Console.WriteLine($"Encrypted text: {encryptedText}");
string finalText = DecryptStringAES(encryptedText, _secret);
Console.WriteLine($"Decrypted text: {finalText}");
static public string EncodeTo64(string toEncode)
byte[] toEncodeAsBytes = ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = Convert.ToBase64String(toEncodeAsBytes);
public static string EncryptStringAES(string plainText, string sharedSecret)
RijndaelManaged aesAlg = null;
string encryptedText = null;
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
csEncrypt.Write(plainBytes, 0, plainBytes.Length);
csEncrypt.FlushFinalBlock();
byte[] encryptedBytes = msEncrypt.ToArray();
encryptedText = Convert.ToBase64String(encryptedBytes);
public static string DecryptStringAES(string cipherText, string sharedSecret)
if (string.IsNullOrEmpty(cipherText))
throw new ArgumentNullException("cipherText");
if (string.IsNullOrEmpty(sharedSecret))
throw new ArgumentNullException("sharedSecret");
RijndaelManaged aesAlg = null;
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
byte[] bytes = Convert.FromBase64String(cipherText);
using (MemoryStream msDecrypt = new MemoryStream(bytes))
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
plaintext = srDecrypt.ReadToEnd();