
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