using System.Security.Cryptography;
using System.Collections.Generic;
private static readonly string key = "2C3BB526E3A4EA9EC60451D801441EBC";
private static readonly Encoding encoding = Encoding.UTF8;
private static readonly string iv = "iv";
private static readonly string value = "value";
public static void Main()
var decryptedData = Decrypt("eyJpdiI6IllsK25SS2ZNY1g2dXBaV3lqd0lzQUE9PSIsInZhbHVlIjoidEdLRXpPY3VaaVIxL0FZUXE5Y0RiallITkV6bDZLZFYrYk9WUWFIQzFRai85SU85Ry8wZWp3ek04bi93dE9JakZIRmh0UVJPUnJIV3duYVRLK0tEejlpUllab3JOTElSOXFlL2ZjUENGd2xvRDB4Z2dmWllRY3dDMzJrVWlYVnlMTmFoZmtKckIvTHF2S1hadUU4bHFUaHk2Q3Z6eEJRSDRaMnNpODI3TXUwWU0rY3RWL1ZxVjFGZFdLSjgvZ0tTWjc5MFhRMDE2ejhqNmhiQjNPMHl5VlVmUnhGUDVxR3c1b0M4U3RFbm0ybGlPUjhURkkrV1loWHJrSkpyTGp0SEZ1TjBjL2JDdHc2VmhxNzFHeEdHT1VQeEZhSmREcGFvQlZDVmJxS1pSVDZudnYzSURSK25YbThZaytMcll0R3FKOWdudzREVmZUR0hzVVdXamNLNEdMV0RLRGZPLzJuR21odHd4R3pkNjdpWWlKM1lpeFpHb3F3aDIwQk1sQVNScnNFM3czYnZRcUZPTUZ0eGdQbU95UWYrZjVOTEhkOVJQc3RQelBpRWdKZE10d2dLVWtGTmJVRnR2bjAzYnJGYXkvbmc3MStkNDBGbTNJOU9VaGUvSnB1NENHQWVVM3lNYy9PNFNESWVBWHVLYUJjR0tZZE80Wm9yQndMN3Z4d2cxNWw5MG5MKy9FMlJFclpucDdUOWhWK2tIWlI2QlRVWDVGenBEM04rWlN1V3B5aDQxaHJ1SmdtY1UySWV3Ym5BTXBhY2lYeEl0ZnBrS3Q4OHBabkVLbWN0ek1hK0Z2QXJBMVJ3OVlHWkJjemlYQTJyb1VxYnVLb2lSZE5wb2dLLytma1VkM1V3ellWbHpvUmtJWWdzS1ZuMDkvT1lyQmtXL1diMWdZZ0JNU2d5ZG5nS0IxWWNBaEtOQnRtc2crSW15NDdWcVVTSjEvRy8yQ3lzaWl1YUMrT1RvV3B1ejBiNHNpV0VXeEl0ckZxK3pyd3RzUUpPQjdMOUIra0ZOTEdEaHV5QWtFellQdTR4K2toTko3R3R4VFNuSGtjYS9ESVF2MnJIMStyc3l6L2FaUzlPN1pMRGQxVHUvNEYwaGVuMDE2MmNaZndsNXBUVnhEdi8rc01oRlZLSXI1L0YrTEtCMGdRSG1EYUhEc1VCa2UySXpleXU3ZFpYa3hqSGl2eHhmSEJxYk5McERRMldlZnhBZjRFWlZsM0Y0NlZHV29rMkJyTDBScTV2NFVadzY0ZlFGUzFTc2JZWGpDR1AzaHE3TWdxaTJESkJ1ZTIxSWNqRjBEZS9NT3dXb0tGM01RaGpBTzVyRkN0QThXcHJkZ3pPVGcwd3BkeldQMXF5Z29naUh0NmJYUkRzT2FhTytVcHJrMGJ5K3BXSHN2dDE5bU1kaCtYejhaYXowV2V1NDNCUUtvWTlJZzVYQTljQTVVd3k1R0VBdGh5UldSTUsyZHV5ck00WFRYVlh2clZwaFd4VWRkZnRkdXJtOUI3NUJtRzhPa2c3amw3ZmhMS2hxZS85aGw1QVF0cGFza3NvU2dGSHpDQlh1LzdFZ1NZS0ozNm9LWmMxWWtGYVAxQkRtVkMzWUc1MldORWdlVkJVbVprdVRjRXBqQ0p3dzlnNFFhZVErOGhzckRPYXY5U2dTQ2FkM283SEgzbWgyOGdBUE9MOVcrWFVOcWlYZy9BOWRiVStIYVRicG1kYXRVbWxHaDBrS0ZpOU5PWGFGL0RKallGanVQVmRnQjlSR2x0blFGa0Z0S3dRZTBvWTZ3TWNYNkJjSElUZHZGQXFaMjhmOHh1V084Ung5VlNhbE9ieElBTHBsT2pUWHVmQ0pUSXp5Y3J1cUdxRm93cTlDaTJzMXpsWUVVaE5aTFBiVGNUeFlxYXM4N0E5ZW1lWGF5SFRUbU9zUVdraXlZSVpXQmlBWlFPVUYyZldvbE0yUS9LU1J0bTZrYjNWYjV6V2lLRkVnV2gzZElWeUpZSkxnZmVaRkpNN0NoUmtIV0doLzl1QndXNno1M3R4TWdUdTBGYzZUSGZsUHRSMWtoemVSL3N2dXQvZVJTMnYyaG1LaTgvSjBXQ0tYaEg5TXIwMzlXWEw4VCtSV0JHUXBPTmI5VXlVVGhaMU15UUNuMHBHL1VlaGlQajFCSEs4QWNLY05LdVgyaFIzNURuWG80OEh6d2lvZ1ZSRmd0RW5vZ01sUVhqVVdHbW1IejZ4aHN4RmdsWTNJTmtOMmZkOExLWnVodUpYQlVVL1l6dm5RelF3eVhMNVZFcHZTbFl5YTZJRU9JcUNwS2FGM3lIVlFicW5XTWFCY3F2dk5KcHBZQkI0WnNYU2ljNktJaGhTdGl2M0FQRjc2enlNdVJIVmhLRHdNd1hJbW9LbytKQm0vOUlZQ3hySGI3SHVWWnQvQzQwdkpMU3JSYXFBZU15Zmx6NGw1RDlqeWEyTTJsd2t0S2daVkRmTHA2NzRmTllJU1ZvNWJrMWhDR0lGU2pFd1AyN05SRks2WE9VSmJ3b1FiSi9CRnptWEppS3JvVFpXT3kvZFlhYms0eEZBQmZoeWxTUmFpRXRHZlowTysvdy9hSkE0cWFuUGd3aSsvRnFDSzZHb3lLMkxaNVhPSW1pMDF0aFdwTzBhU1Z0M2pRTVdhc3RITHVyb1JBNjRIWElUTGhWQW9aR3NyNnc3TURuWFZabEl2cVRUZ2lvMWhmdnNMSkN4WHUxZVNJZVU3M3FTS2xHdXZ1RUxhMndHZm40VFdHTjlLQUdYNmhQQXh2eTVYejJjUFJJaXRMa21wS2R4ZmNpcnVBUE1YdmtqSXJYcFpHQnpNQ0RwVUNsOXAvMnQ5SDg1R1FKemtUNlBlZXRhTDdaUFdzWWFvdm5uTmpkRXpsSHFjQjJKSnFFZGs1bEZ3cGZEdEhSOCswMTh0VklWYmREMzk4N3E2Rm5qNDR5eVQvZyswRXQ5T2k0dFlEVUNlT0lBamsvSC94L3Q5aGZEeHhmTUJEVWNEUUVibmJNSXUrcnozbjFtSThZYWVocEJJa0tFdHAzY1UwUXpOZFJlOU5zbEo3OUZxRkJQQlF3a3pqZnc4NGZOOUhoZ29BdmRDalRmcVJ4WnlKZzlMWDF3bjQ5V1FCK1NBbFM0NUp3K2pVQXdlZmFVTEJqRDVsdktlYXhpNHBNbzB5Q2hTV0t3MmErYVVUNDRyd0ttZWhKTjVIcGlqbS9kSEZDVFNhaWphNnFlSStlN2lVNVdIUXVWckZobU1OYUdyeTh5bFV3L1BaaStRWnlHYXFvam8yZ0QyQU1RUUtyRWVxZ3haM0tOZ3RDaStzcUdjZERMU3Q1Y1hKMWFJUWZvYm1NWGxzZnN3L0lZQ2psWUZEcnMzakFzNElYMjdRblJ0bXdlaUttS2J6WkRYSGNvSEgrTVNYUUtMazFjaDZCRzRPcnlteXlSVElLd2hxTGMwRWdzZ2J6Tm1YazR6TjI3QkVTRDNqTDJZYzNydVE2OTVkbUFrc3VWME5rcE1NcEswMGVrV0JieExwK2dFVzRIY3pMQmI0TWtvQUpmdHhtTGxwVEJ3TnhLTUdkSFR3azN5cUhYWkxucUVlOFQ3SVB4NWlBUUdhRVlxWkdwV1Jzd0E4SzZSNkg4eGUrcG1Pd3k0VW5aRjJYTFNoYXhoaGdjRXBqdUkxSmgwTUZJYUZEeDBYV0k2N1dMMHBRUnhFeGRyaDcwSmJ1b3hVVmtvRURGZVdHM1lCL3oyZGpOTURzalFQSjRZcHVjZ0Fzb3RRZ3VwcDJjbTVvckRWVlg2cWlTcERZbmREQWtaODV3QjFWYkxZL3N5U3poSURSRkMwb1QybFhrMEhLYnZIZ1dBSVFXQjNUSzVEZW9WZHFPb2I0ajBsQ1dWMjVBaGVEajJmQWhPQVpJYjRCS3Z6bmhaUWtET3prblpZdEtoZ3FWeVp5a3R1ZnA5dDJFTXZxdDBUeDJaL1RrY2FQd0J3WTdnUEwxOWxTWC9KaXBMT3g5SVpFd2NLcVRUd1M4QkhNWjJNd2VnRHIrSFNxazBYWjA5cnBWcVUwdjhWaVZ6aHRtZTZEYzFIbmpORDFkamxueUYwdVFLemxWcDFiNWVLWTg1Z0JJOGwwRXVxUkxKblBSam5WLzZheEpVUEFMazAzWVlJQWtVMUR0MTdWdFFpRjFwZU01L0MwTW9qK09peWpxaSt5U3YybmU0Z1NtSUtKSyttTGhqWjVwWWdaS2pKd1N2SXNxOFI0RWgvZTRLUlA1ZmlvaGlaZUxFbDJNQlM0d1J2Uzg2OXN6UkpWNXN6bkkwSlZHUlRYYkxvVEVxSk8zWGJBcElLeW1yc0hCR29VOENocXN5N0k2VFpFblJqMHJNdCtVS1VUUHVYVHFKUzJGU1JXeGdSbnNhbXpZNHpESWIxYUN4Q0hRYTgrbGhpRmZBSmwzaGd3VjhKR01obFB1UlFzTGdJelc0YnRnVnE1bTJyUHdjelF3aHFVUWg3Y0Q0eHZDQ3JXVkFFeFplQkozVUF4TTA5RDhYMHluMStpVmxobEU5b0w5L1h3TFRyVGV5V29BTmYwdjJGM2VUK2RqSGpDQTFhTlZNZEhQNDYzbjBpWVhjczdWUGxhODRJNUJzOWIyK2o3S0ovb2xhVFJjVnE0UTNnclpFTmVabWdQUjhPZTV6djd4Q0Q5alpkSkt6czVCRytBK0QvRzNtLzdCa0FsTFFPOWtOb0NYZy9hc1F2V1JaRnpBdDhNcGZPSUo0dUxCTW92L0dPZGc0TDl3NzFmSVlEc1ZlUXY1dStjajByQnMzOVVKL1h2Tjk1Zmx1djRyV1hMODVQUk5wTnN3YUM4cktNdjEySUZkc01kdGpyd1pCc0FCQURxNlBaT0ZGR2oyQlpoYUhEWWxmT0hqdnlIV2VzMjZmTE42WDdFM1ZmQ1AwN2pkU1c5cmF0NDFQQUQrN2VUaGVEODNKN3o1ZmZRVDBXTGJnZkg3Y0NPd0xsa0QvSE5XK0tFS3JYRXpreC80WXFmOGV0TVdCWFZUQ0o0N3hzdlEyd3RDdk53bkhUampMNlMvaWp1RTNCMjliWkpSNWJOQ1ZOeHRrTTgyeWU0SzdhWE1DMUtEdFpGTnltYStNQy9KT01VM3E2ZVhENGhQRXliaDkwTXRpdE13ek5sWEZBNlozMlVOaE5sb1grMkczZXp5UERwVStFcmp2WkY1emFzMEhhUzkyY0gzM0lha05xVkREaVBuUElRT2IwYW5IRVlzVXdwQ1VLenlTMkJBMElzeXpFY0tLTXRDejB3K0lKK2xNVEt3ZE9WakxORTh4OFNIWC9wWjN2TWYrZDVYNVNSSXBuYkVWZ2k5bkJuVDhMZGRvbWVtUzNRclVqTXpLeDNwMVl6Z2pBTWFYVERybnBMVHBHN2pKZFMwa0oxdXAzSkxQL3l1bjArQW12cXFyYkdINlh6YVIxOUt6RVJnYmowVVRocFdxc1Qram1iMDh4Z2s5dDVMcnYwV3U0dkxoZEV3M0dEdjRqRWFWVThNMzFGdzR1Q1NxNHZXV1VuZmdtbHNrS3NhNXhONFV6VDZVcFd6T3RNTEZWZ3NscHpZK2NEOXVqS0EyV0hUTmhBSkdTVm9MdVhsekxkSURua0RqVS9CaVR0eTVxdFVUZ1NBcHdlZ0NmZXRQQ2pCa1FQRFhOS2dIMmdmdDBZLzlIUm1ta1YrVzRWWFdrZTExY1lKd1g2NmZxd1RwN21xOGhZN3piOWtOSS9qaUZHekkvbEZ0d2s5OVU3MjZXaUFyMmhsazNoRVNxeHhzWnd3Q2xhdGlZOU5CQkpOVzg0T1ZQWU9sZ1Y4OHNNMkFUZytOcko5ZkxhdlBoUjVaY1RaZGJIUEVCMXFqcFRDK0xFUW03YzVGS1RLTXpNU0tselhBeDdrVElpSzJSaU85WmlIMTVEYWdqT2pySWFnK25iTkVtMnRsNFV0ZUszTnV1azl3MGFoQzJ4VDZNTGpyN3ppVXlrbjhmZk5PU1g1bzNoZSt3VUdvang5RFZSM2hybXNqUjVpSEpCZlVhNXFKbTlYWGphbk0wVWlNREgrSHU5Y04zK3NIa2g2bk5LYWUwTkVkQUlXVXR1VEpnQk1hbGdPdXB3UkZ3aW93RnhScFNFQmd6MlZVKzlQTS9JQmU3OUdlZXNLWlZIU25RU3FLWVJwYXMvUDlCRW1qNzhGaEdGNUh4bllIVDJHK1VWRUNCU1lGZGJPKzMzdkcwbFpsNHFqZzFBcDdqcXB2ZjUxcWtPV2xiWXJtTHc5YmxZTDVuZHFpMi9rVUh0elFwY1NjaUxET1pSYitoendBbXZnSTJsRlZIaEJCMVNvcENUd0JlWEZsUlVOTUt6NVJlSHc4QjNuci9seXJ1T2NaSzZ1YzJYS3ozSkhXdTEwTmF6Wlc5d0NHQ09WZytoMlBmNEFhWHcrRnh2eDJiN0lPNjZ2WGFWaXNVZ2t2YmJxV3VXQzZnbzROQVF5YlJSSW9vd3BYeVcxZ1NOdlBUek15aXpOL3Q1VjNaYWtJYmxoY3Q1NUJlbUFzVkV3cVhCUmVLRFI2T09hTGRnQjd0QmVnYVM0ZmYvc1RMVjRpMzlSQ2tHUlUyTExWUU94cXBqQVk5TzN0dTA3VU1GZHlPaG04d05pckc1M0xRek1yYTlyOU96ZVBhOXZyZWJoNTN4RE0vUmxCTUs0c0k0Y2xCcG9MLzczSXZPMGZ2ZExtL2ZJR2FtU3hNeDllSkJjVXMyQlZHeEdyVkxXb1JTUmZwVTY1QjFVdzBGd3lDU2ZKcm9TWElJejdtZVM4MlpzVmlUUGEyR2NJSXoxclMwcFg0cHN4UjFEMlFkM0xrUXcrM3NqV1QySmk2N0NYOGk3MU15QklkZDhFVFhKSHJVd0xNbUU0L2F1QWpDWW1NckY0WERnOURtMmhZYlJ4bkFmRXV2L1NkZ2tMSW9zUzN3NmlrRWtnUEpCYVBvSHhPZz0iLCJlYTgyZWE5MTgxNmI2ZWUwN2U0NDUzOTlkYzk5NWRkMWEwYWZjZmZlODQ5NjE3Y2VkMzY3NzY5NjBhNGZjYmMwIjoiZWE4MmVhOTE4MTZiNmVlMDdlNDQ1Mzk5ZGM5OTVkZDFhMGFmY2ZmZTg0OTYxN2NlZDM2Nzc2OTYwYTRmY2JjMCJ9");
var json = decryptedData.Replace("Block","BlockTable").Replace("'", "\"");
var encryptedData = Encrypt(json);
Console.WriteLine(encryptedData);
private static T DeserializeFromJSON<T>(string json_data) where T : class
if (String.IsNullOrEmpty(json_data) == true)
res = JsonConvert.DeserializeObject<T>(json_data);
private static string SerializeToJSON(object request, bool indent)
if (request == null) { return null; }
json_data = JsonConvert.SerializeObject(request, Newtonsoft.Json.Formatting.Indented);
json_data = JsonConvert.SerializeObject(request);
private static string Encrypt(string msg)
RijndaelManaged aes256Crypt = new RijndaelManaged()
Padding = PaddingMode.PKCS7,
Key = encoding.GetBytes(key)
aes256Crypt.GenerateIV();
ICryptoTransform AESEncrypt = aes256Crypt.CreateEncryptor(aes256Crypt.Key, aes256Crypt.IV);
byte[] buffer = encoding.GetBytes(msg);
string encryptedText = Convert.ToBase64String(AESEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));
string mac = BitConverter.ToString(HmacSHA256(Convert.ToBase64String(aes256Crypt.IV) + encryptedText, key)).Replace("-", "").ToLower();
var cryptMap = new Dictionary<string, object>
{ iv, Convert.ToBase64String(aes256Crypt.IV) },
{ value, encryptedText },
return Convert.ToBase64String(encoding.GetBytes(SerializeToJSON(cryptMap, false)));
private static string Decrypt(string cryptMsg)
RijndaelManaged aes256Crypt = new RijndaelManaged()
Padding = PaddingMode.PKCS7,
Key = encoding.GetBytes(key)
string jsonBody = encoding.GetString(Convert.FromBase64String(cryptMsg));
Dictionary<string, string> cryptMap = DeserializeFromJSON<Dictionary<string, string>>(jsonBody);
aes256Crypt.IV = Convert.FromBase64String(cryptMap[iv]);
ICryptoTransform AESDecrypt = aes256Crypt.CreateDecryptor(aes256Crypt.Key, aes256Crypt.IV);
byte[] buffer = Convert.FromBase64String(cryptMap[value]);
decryptMsg = encoding.GetString(AESDecrypt.TransformFinalBlock(buffer, 0, buffer.Length));
private static byte[] HmacSHA256(string data, string key)
using (HMACSHA256 hmac = new HMACSHA256(encoding.GetBytes(key)))
return hmac.ComputeHash(encoding.GetBytes(data));