All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.app.common.utils.ApiKeyUtils Maven / Gradle / Ivy

package com.app.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.UUID;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;

public class ApiKeyUtils {
	private final static String SERVER_NAME = "rubydex_abc123";
	private final static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
			"m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6",
			"7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
			"S", "T", "U", "V", "W", "X", "Y", "Z" };

	public static String getApiKey() {
		StringBuffer shortBuffer = new StringBuffer();
		String uuid = UUID.randomUUID().toString().replace("-", "");
		for (int i = 0; i < 8; i++) {
			String str = uuid.substring(i * 4, i * 4 + 4);
			int x = Integer.parseInt(str, 16);
			shortBuffer.append(chars[x % 0x3E]);
		}
		return uuid.toString();

	}

	public static String getAppSecret(String appId) {
		try {
			String[] array = new String[] { appId, SERVER_NAME };
			StringBuffer sb = new StringBuffer();
			Arrays.sort(array);
			for (int i = 0; i < array.length; i++) {
				sb.append(array[i]);
			}
			String str = sb.toString();
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(str.getBytes());
			byte[] digest = md.digest();

			StringBuffer hexstr = new StringBuffer();
			String shaHex = "";
			for (int i = 0; i < digest.length; i++) {
				shaHex = Integer.toHexString(digest[i] & 0xFF);
				if (shaHex.length() < 2) {
					hexstr.append(0);
				}
				hexstr.append(shaHex);
			}
			return hexstr.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}

	private static final String signatureMethodValue = "HmacSHA256";

	public static String createSignature(String secretKey, String body) throws Exception {

		Mac hmacSha256 = Mac.getInstance(signatureMethodValue);
		SecretKeySpec secKey = new SecretKeySpec(secretKey.getBytes(), signatureMethodValue);
		hmacSha256.init(secKey);
		String actualSign = new String(Hex.encodeHex(hmacSha256.doFinal(body.getBytes())));
		return actualSign;

	}

	public static int API_REQ_HAS_EXPIRE = 7001;
	public static int API_SIGN_ERROR = 7002;
	public static int API_NOT_EXIST = 7000;
	public static PResult verifySignature(String secret_key, long expire, String body, String sign) {
		PResult pResult = new PResult();
		long currentTime = System.currentTimeMillis();
		if (currentTime >= expire) {
			pResult.code = API_REQ_HAS_EXPIRE;
			pResult.msg = "API_REQ_HAS_EXPIRE";
			return pResult;

		}
		try {
			String currentSign = ApiKeyUtils.createSignature(secret_key, body + expire);
			if (!currentSign.equals(sign)) {
				pResult.code = API_SIGN_ERROR;
				pResult.msg = "API_SIGN_ERROR";
			}
		} catch (Exception e) {
			pResult.code = API_SIGN_ERROR;
			pResult.msg = "API_SIGN_ERROR";
		}
		return pResult;
	}

	public static void main(String[] args) throws Exception {
		String appId = getApiKey();
		String appSecret = getAppSecret(appId);
		System.out.println("appId: " + appId);
		System.out.println("appSecret: " + appSecret);

		System.out.println("signature: " + createSignature(appSecret, "body" + System.currentTimeMillis()));

	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy