package com.common.core.utils; import org.apache.commons.codec.digest.HmacUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * @author 廖振钦 * @date 2022-01-14 */ public class SignUtil { private static final String DEFAULT_SECRET = "1qaz@WSX#$%&"; public static String sign(String body, Map params, String[] paths) { StringBuilder sb = new StringBuilder(); if (StringUtils.isNotBlank(body)) { sb.append(body).append('#'); } if (!CollectionUtils.isEmpty(params)) { params.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(paramEntry -> { String paramValue = String.join(",", Arrays.stream(paramEntry.getValue()).sorted().toArray(String[]::new)); sb.append(paramEntry.getKey()).append("=").append(paramValue).append('#'); }); } if (ArrayUtils.isNotEmpty(paths)) { String pathValues = String.join(",", Arrays.stream(paths).sorted().toArray(String[]::new)); sb.append(pathValues); } String createSign = HmacUtils.hmacSha256Hex(DEFAULT_SECRET, sb.toString()); return createSign; } public static String sign(String secret, String body, Map params, String[] paths) { StringBuilder sb = new StringBuilder(); if (StringUtils.isNotBlank(body)) { sb.append(body).append('#'); } if (!CollectionUtils.isEmpty(params)) { params.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(paramEntry -> { String paramValue = String.join(",", Arrays.stream(paramEntry.getValue()).sorted().toArray(String[]::new)); sb.append(paramEntry.getKey()).append("=").append(paramValue).append('#'); }); } if (ArrayUtils.isNotEmpty(paths)) { String pathValues = String.join(",", Arrays.stream(paths).sorted().toArray(String[]::new)); sb.append(pathValues); } String createSign = HmacUtils.hmacSha256Hex(secret, sb.toString()); return createSign; } public static void main(String[] args) { String body = "{\n" + "\t\"name\": \"hjzgg\",\n" + "\t\"age\": 26\n" + "}"; Map params = new HashMap<>(); params.put("var3", new String[]{"3"}); params.put("var4", new String[]{"4"}); String[] paths = new String[]{"1", "2"}; System.out.println(sign(body, params, paths)); } }