using System.Security.Cryptography;
public static void Main(string[] args)
string key = "WKOBlNUlzvNzh9g/9uBfqQ==";
var iv = "iHoGTaaZHV08/iiHeoBbJA==";
var testData = GetTestData();
string testJsStr = JsonConvert.SerializeObject(testData);
Console.WriteLine("step3 Original:\n" + testJsStr);
Console.WriteLine("--------");
string encryptedStr = AesCrypt.AESEncrypt(testJsStr, key, iv);
string decryptedStr = AesCrypt.Decrypt(encryptedStr, key);
Console.WriteLine("error message :\n" + ex.Message);
private static string getRandomBase64String()
Random rand = new Random();
return Convert.ToBase64String(b);
private static TestData GetTestData()
var ret = new TestData();
ret.sh_order_no = "5dc3dd5c74b5c";
ret.created_at = "2019-11-01 00:00:00";
ret.notify_url = "https://test.domain";
public string sh_order_no;
public string order_type;
public string created_at;
public string notify_url;
public string error_code;
public static string AESEncrypt(string toEncrypt, string key, string iv)
byte[] keyArray = Convert.FromBase64String(key);
byte[] ivArray = Convert.FromBase64String(iv);
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Mode = CipherMode.CBC;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
var val = Convert.ToBase64String(resultArray, 0, resultArray.Length);
Console.WriteLine("step4 value: " + val);
var data = new AesModel() { iv = iv, value = val };
var serialData = JsonConvert.SerializeObject(data);
var ret = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(serialData));
public static string Decrypt(string encryptedStr, string KeyString)
var encoding = new UTF8Encoding();
string jsStr = encoding.GetString(Convert.FromBase64String(encryptedStr));
var dataModel = JsonConvert.DeserializeObject<DataModel>(jsStr);
if (dataModel.error_code != null)
var message = dataModel.data.message;
throw new System.ArgumentException(message);
return AESDecrypt(dataModel.iv, dataModel.value, KeyString);
static private string AESDecrypt(string iv, string value, string key)
byte[] cypher = Convert.FromBase64String(value);
var Key = Convert.FromBase64String(key);
var IV = Convert.FromBase64String(iv);
using (var rj = new RijndaelManaged())
rj.Padding = PaddingMode.PKCS7;
rj.Mode = CipherMode.CBC;
var ms = new MemoryStream(cypher);
using (var cs = new CryptoStream(ms, rj.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
using (var sr = new StreamReader(cs))
sRet = sRet.Length > 0 ? (sRet + "\n" + tmp) : tmp;
Console.WriteLine("DecryptRJ128 Error:" + e.ToString());