Seamless
Sample Codes
Java

Java

Encrypt

import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESEncrypt {
    public static String encrypt(String data, String key, String iv) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
        int blockSize = cipher.getBlockSize();
        byte[] dataBytes = data.getBytes("UTF-8");
        int plainTextLength = dataBytes.length;
        if (plainTextLength % blockSize != 0) {
            plainTextLength = plainTextLength + (blockSize - plainTextLength % blockSize);
        }
        byte[] plaintext = new byte[plainTextLength];
        System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
        SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
        IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
        byte[] encrypted = cipher.doFinal(plaintext);
        return Base64.encodeBase64URLSafeString(encrypted);
    }
 
    // Sample
    public static void main(String[] args) throws Exception {
        String data = "SampleData";
        System.out.println(encrypt(data, $ { KEY }, $ { IV }));
    }
}

Decrypt

import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESDecrypt {
    public static String decrypt(String data, String key, String iv) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"),
            new IvParameterSpec(iv.getBytes()));
        String decryptData = new String(cipher.doFinal(Base64.decodeBase64(data)));
        return decryptData;
    }
 
    // Sample
    public static void main(String[] args) throws Exception {
        String encryptData = "GhKRVa6BHoOJAhjVYMKuFw";
        String key = "key1234567Sample"; // $ { KEY }
        String iv = "iv12345678Sample"; // $ { IV }
        System.out.println(decrypt(encryptData, key, iv)); // return “SampleData”
    }
}

Call API

Example: Action 47 Get Demo Game Launch URL

AESEncrypt: Please refer to the “Encrypt” sample code

import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.util.ArrayList;
import java.util.List;
public class SandAPI {
    public static void main(String[] args) throws Exception {
        String dc = $ { DC };
        String key = $ { KEY };
        String iv = $ { IV };
        String apiUrl = $ { API_URL };
        // get a client
        CloseableHttpClient client = HttpClientBuilder.create().build();
        // prepare action 47 data
        JSONObject data = new JSONObject();
        data.put("action", 47);
        data.put("ts", System.currentTimeMillis());
        data.put("lang", "en");
        data.put("gType", "0");
        data.put("mType", "8001");
        data.put("windowMode", "2");
        // encrypt
        String x = AESEncrypt.encrypt(data.toString(), key, iv);
        // build request
        List<NameValuePair> paramList = new ArrayList<>();
        paramList.add(new BasicNameValuePair("dc", dc));
        paramList.add(new BasicNameValuePair("x", x));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "UTF-8");
        HttpPost httpPost = new HttpPost(apiUrl);
        httpPost.setEntity(entity);
        // gzip
        // httpPost.setHeader("Accept-Encoding", "gzip");
        HttpEntity httpEntity = null;
        try {
            // Resolve response
            HttpResponse response = client.execute(httpPost);
            httpEntity = response.getEntity();
            System.out.println(EntityUtils.toString(httpEntity));
        } finally {
            EntityUtils.consume(httpEntity);
        }
    }
}