package com.zy.asrs.framework.utils; import com.zy.asrs.framework.common.Cools; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import static javax.xml.bind.JAXBIntrospector.getValue; /** * Created by vincent on 2020-01-06 */ public class SignUtils { /** * 生成签名 * (规则如下: * 第一步: * 设所有发送或者接收到的数据为集合M, * 将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序), * 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA * * 第二步: * 在stringA最后拼接上key得到stringSignTemp字符串, * 并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写, * 得到sign值signValue * ) * @param map 参数集合 * @param secret 密钥 * @return the sign 签名 */ public static String sign(Map map, String secret) { List list = new ArrayList<>(); for (String key : map.keySet()) { if (!key.equals("sign") && map.get(key) != null) { list.add(key + "=" + getValue(key) + "&"); } } int size = list.size(); String[] arrayToSort = list.toArray(new String[size]); Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); StringBuilder sb = new StringBuilder(); for (int i = 0; i < size; i++) { sb.append(arrayToSort[i]); } String stringA = sb.toString(); stringA += "key=" + secret; return Cools.md5(stringA).toUpperCase(); } }