本文主要是介绍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;}}
主要参考:链接
这篇关于application/x-www-form-urlencoded 所有参数排序以及参数自动添加sign签名工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!