weaver-hrm-salary/src/com/engine/salary/util/SingnatureData.java

91 lines
3.0 KiB
Java
Raw Normal View History

2023-07-20 09:58:27 +08:00
package com.engine.salary.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
/**
* @author jie.zhou
* @version 1.0
* @date 2021/1/14 15:27
*/
@Slf4j
public class SingnatureData {
/**
* 初始化延签头信息(GET)
*
* @param param
* @param appKey
* @param appSecret
* @return
*/
public static Map<String, String> initHeader(Map<String, String> param, String appKey, String appSecret) {
String version = "1.0.0";
long timestamp = System.currentTimeMillis();
String nonce = UUID.randomUUID().toString().replace("-", "");
Map<String, String> head = new HashMap<String, String>();
if (param != null && param.size() > 0) head.putAll(param);
head.put("version", version);
head.put("timestamp", Long.toString(timestamp));//TimeStamp
head.put("appKey", appKey);//accessKeyID
head.put("xReqNonce", nonce);//SignatureNonce
String signature = getSign(head, appSecret, "UTF-8");
head.put("signature", signature.trim());
return head;
}
/***
* 获取签名
* @param params
* @param appSecret
* @param encoding
* @return
*/
public static String getSign(Map<String, String> params, String appSecret, String encoding) {
TreeMap<String, String> treeMap = new TreeMap<>();
treeMap.put("appSecret", appSecret);
for (Map.Entry<String, String> entry : params.entrySet()) {
treeMap.put(entry.getKey(), entry.getValue().toString());
}
StringBuilder builder = new StringBuilder();
for (Object parameter : treeMap.values()) {
if (parameter != null) {
builder.append(parameter.toString());
}
}
String signStr = null;
try {
signStr = sign(URLEncoder.encode(builder.toString(), encoding), appSecret);
} catch (Exception e) {
log.error("获取签名失败", e);
}
return signStr;
}
public static String sign(String data, String appSecret) throws SignatureException {
try {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec signingKey = new SecretKeySpec(appSecret.getBytes(), "HmacSHA256");
mac.init(signingKey);
byte[] signData = mac.doFinal(data.getBytes());
return Base64.encodeBase64String(signData);
} catch (NoSuchAlgorithmException e) {
throw new SignatureException("平台不支持" + "HMAC_SHA256" + "摘要方式");
} catch (InvalidKeyException e) {
throw new SignatureException("Speicified access secret is not valid.");
}
}
}