package com.by4cloud.platformx.business.utils;
|
|
import javax.crypto.Mac;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.security.InvalidKeyException;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.Base64;
|
import java.util.Map;
|
import java.util.TreeMap;
|
|
/**
|
* 请求开放平台套件授权相关接口的加签类
|
* SignHelper
|
*
|
* syt
|
* 2026年5月20日 10:31:44
|
*/
|
public class SignHelper {
|
|
|
/**
|
* 按参数名排序后依次拼接参数名称与数值, 之后对该字符串使用 HmacSHA256 加签, 加签结果进行 base 64 返回
|
*
|
*/
|
public static String sign(Map<String, Object> params, String suiteSecret) throws
|
NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
|
Map<String, Object> treeMap;
|
if (params instanceof TreeMap) {
|
treeMap = params;
|
} else {
|
treeMap = new TreeMap<>(params);
|
}
|
StringBuilder stringBuilder = new StringBuilder();
|
for (Map.Entry<String, Object> entry : treeMap.entrySet()) {
|
stringBuilder.append(entry.getKey()).append(entry.getValue());
|
}
|
Mac mac = Mac.getInstance("HmacSHA256");
|
mac.init(new SecretKeySpec(suiteSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
|
byte[] signData = mac.doFinal(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
|
String base64String = Base64.getEncoder().encodeToString(signData);
|
return URLEncoder.encode(base64String, "UTF-8");
|
}
|
}
|