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 params, String suiteSecret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException { Map treeMap; if (params instanceof TreeMap) { treeMap = params; } else { treeMap = new TreeMap<>(params); } StringBuilder stringBuilder = new StringBuilder(); for (Map.Entry 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"); } }