| 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<String, Object> map, String secret) { | 
|         List<String> 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(); | 
|     } | 
|   | 
| } |