C#
Encrypt
using System;
using System.Security.Cryptography;
using System.Text;
public class AESEncrypt {
public static string encrypt(string data, string key, string iv) {
byte[] encrypted;
using(SymmetricAlgorithm des = Rijndael.Create()) {
byte[] inputByteArray = Encoding.UTF8.GetBytes(data);
des.Key = Encoding.UTF8.GetBytes(key);
des.IV = Encoding.UTF8.GetBytes(iv);
var encrypter = des.CreateEncryptor();
encrypted = encrypter.TransformFinalBlock(inputByteArray, 0, inputByteArray.Length);
}
var URL_Safe_AESEncrypt_String = Convert.ToBase64String(encrypted)
.TrimEnd('=').Replace('+', '-').Replace('/', '_');
return URL_Safe_AESEncrypt_String;
}
public static void Main(string[] args) {
string data = "SampleData";
string encryptData = encrypt(data, $ { KEY }, $ { IV });
System.Console.WriteLine(encryptData);
}
}
Decrypt
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
public static class AESDecrypt {
public static string decrypt(string encryptData, string key, string iv) {
string decryptData = "";
try {
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.None;
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
string source = encryptData.Replace('-', '+').Replace('_', '/');
int addPaddingCounts = (4 - (source.Length % 4)) % 4;
for (int i = 0; i < addPaddingCounts; i++) {
source += "=";
}
byte[] encryptDataByteArray = Convert.FromBase64String(source);
using(MemoryStream ms = new MemoryStream()) {
using(CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(),
CryptoStreamMode.Write)) {
cs.Write(encryptDataByteArray, 0, encryptDataByteArray.Length);
cs.FlushFinalBlock();
decryptData = Encoding.UTF8.GetString(ms.ToArray());
}
}
} catch (Exception e) {
Console.WriteLine(e.Message);
}
return decryptData;
}
public static void Main(string[] args) {
string encryptData = "C2D2P01hhevu38f8uC8aOA";
string key = "key1234567Sample"; // $ { KEY }
string iv = "iv12345678Sample"; // $ { IV }
string decryptData = decrypt(encryptData, key, iv);
Console.WriteLine(decryptData); // return “SampleData”
}
}
Call API
Example: Action 47 Get Demo Game Launch URL
AESEncrypt: Please refer to the “Encrypt” sample code
using System;
using Newtonsoft.Json.Linq;
using RestSharp;
public class Sample {
public static void Main(string[] args) {
string dc = $ { DC };
string key = $ { KEY };
string iv = $ { IV };
string apiUrl = $ { API URL };
// prepare action 47 data
string data = @ "{'action':47,'ts':" + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + ",'lang':'en','gType':'0','mType': '8001', 'windowMode': 2}";
// encrypt data
string x = AESEncrypt.encrypt(data, key, iv);
// check environment Settings file
var client = new RestClient(apiUrl);
// post
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "dc=" + dc + "&x=" + x, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
}
}