Seamless
Sample Codes
C#

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);
  }
}