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(); 
 | 
    } 
 | 
  
 | 
} 
 |