using System.Security.Cryptography;
namespace TestAes256Encryption
static void Main(string[] args)
string hexKey = "5468576D597133743677397A24432646294A404E635266556A586E3272347537";
string valueToEncrypt = "100121";
string encryptString = Aes256Encrypt(valueToEncrypt, hexKey);
string encryptString2 = "S08KMR5zehPSfypSX1ON1A==";
string encryptString3 = "EjvIjnaxNSzKtEXfE8h1YZ2MRg5+K130Jv8G+efaaFw=";
Console.WriteLine(valueToEncrypt);
Console.WriteLine(encryptString);
Console.WriteLine(AES256Decrypt(encryptString, hexKey));
Console.WriteLine(AES256Decrypt(encryptString2, hexKey));
Console.WriteLine(AES256Decrypt(encryptString3, hexKey));
public static string AES256Decrypt(string base64StringToDecrypt, string hexEncryptionKey)
string response = string.Empty;
if (String.IsNullOrEmpty(base64StringToDecrypt) || String.IsNullOrEmpty(hexEncryptionKey))
var base64EncodedBytes = Convert.FromBase64String(base64StringToDecrypt);
using (Aes aesAlg = Aes.Create())
aesAlg.Key = HexToByteArray(hexEncryptionKey);
byte[] IV = new byte[aesAlg.BlockSize / 8];
byte[] toDecrypt = new byte[base64EncodedBytes.Length - IV.Length];
Array.Copy(base64EncodedBytes, IV, IV.Length);
Array.Copy(base64EncodedBytes, IV.Length, toDecrypt, 0, toDecrypt.Length);
aesAlg.Mode = CipherMode.CBC;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (var msDecrypt = new MemoryStream(toDecrypt))
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var srDecrypt = new StreamReader(csDecrypt))
response = srDecrypt.ReadToEnd();
public static string Aes256Encrypt(string stringToEncrypt, string hexEncryptionKey)
if (String.IsNullOrEmpty(stringToEncrypt) || String.IsNullOrEmpty(hexEncryptionKey))
using (Aes aesAlg = Aes.Create())
aesAlg.Key = HexToByteArray(hexEncryptionKey);
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (var msEncrypt = new MemoryStream())
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
swEncrypt.Write(stringToEncrypt);
encrypted = msEncrypt.ToArray();
var combinedIvWithEncrypted = new byte[IV.Length + encrypted.Length];
Array.Copy(IV, 0, combinedIvWithEncrypted, 0, IV.Length);
Array.Copy(encrypted, 0, combinedIvWithEncrypted, IV.Length, encrypted.Length);
return Convert.ToBase64String(combinedIvWithEncrypted);
public static byte[] HexToByteArray(string value)
value = ComputeMd5Hash(value);
return Convert.FromBase64String(value);
public static string ComputeMd5Hash(string message)
using (MD5 md5 = MD5.Create())
byte[] input = Encoding.ASCII.GetBytes(message);
byte[] hash = md5.ComputeHash(input);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
sb.Append(hash[i].ToString("X2"));