application/x-www-form-urlencoded 所有参数排序以及参数自动添加sign签名工具类

import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

/**
 * @program: outsys-adapter
 * @description: 所有参数排序以及参数自动添加sign签名
 * @author: ShiHuaHao
 * @create: 2019-06-28 09:40
 **/
public class ParamUtil {

    /**
     * 所有参数排序以及参数自动添加sign签名
     * @param param
     * @return
     */
    public static String getParam4Url(String param) throws NoSuchAlgorithmException {

        // 将参数按字母排序
        String[] parameters = param.split("&");
        TreeMap SortedParametersWithoutSign = new TreeMap();

        for (int i = 0; i < parameters.length; i++) {
            String[] pandvalue = parameters[i].split("=");
            if (pandvalue.length > 1) {
                String[] values = Arrays.copyOfRange(pandvalue, 1, pandvalue.length);
                if (!values[0].equals(""))
                    SortedParametersWithoutSign.put(pandvalue[0], values[0]);
            }
        }

        String requestParameters = "";
        Set set = SortedParametersWithoutSign.entrySet();
        Iterator iterator = set.iterator();
        int iterationcount = 0;
        while(iterator.hasNext()) {
            Map.Entry mentry = (Map.Entry)iterator.next();
            if(iterationcount == 0)
                requestParameters += mentry.getKey()+"="+mentry.getValue();
            else requestParameters += "&"+mentry.getKey()+"="+mentry.getValue();
            iterationcount++;
        }

        // 将组装的参数 得到md5 散列串
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(requestParameters.getBytes(Charset.forName("UTF-8")));
        BigInteger number = new BigInteger(1, messageDigest);
        String hashtext = number.toString(16);
        // Now we need to zero pad it if you actually want the full 32 chars.
        while (hashtext.length() < 32) {
            hashtext = "0" + hashtext;
        }

        // 加入sign的参数,重新生成 请求的参数。
        SortedParametersWithoutSign.put("sign",hashtext);

        // 重新拿到最新的请求数据
        requestParameters = "";

        set = SortedParametersWithoutSign.entrySet();
        iterator = set.iterator();
        iterationcount = 0;
        while(iterator.hasNext()) {
            Map.Entry mentry = (Map.Entry)iterator.next();
            if(iterationcount == 0)
                requestParameters += mentry.getKey()+"="+mentry.getValue();
            else requestParameters += "&"+mentry.getKey()+"="+mentry.getValue();
            iterationcount++;

        }
        return requestParameters;
    }

}

主要参考:链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值