签名计算过程如下:
1.将请求头公共参数appkey、nonce、timestamp参数名和参数值进行拼接;
2.拼接业务入参Json格式字符串;
3.拼接链多多系统颁发的授权秘钥secret,组成签名计算的字符串;
4.最后MD5计算出32位大写字符串为最终签名
appkey=test secret=123456 nonce=e38bcb56-7a6f-4452-bd07-34dcb74a042f timestamp=1626261718511 业务入参:{"code":"123456"}
package com.zhoubian.web.controller.tool; import java.util.HashMap; import java.util.Map; import java.util.TreeSet; public class MD5Util { /** * 签名 * * @param headers * 头信息 * @param body * body * @param secret * secret * @return 签名后的串 */ public static String sign(Map<String, String> headers, String body, String secret) { StringBuilder signBefore = new StringBuilder(); // step1:先对请求参数排序 TreeSet<String> sortSet = new TreeSet<>(headers.keySet()); for (String key : sortSet) { String value = headers.get(key); signBefore.append(key).append(value); } signBefore.append(body).append(secret); String sign = SecureUtil.md5(signBefore.toString()); log.info("签名前的字符串:{}", signBefore); log.info("签名后的字符串:{}", sign); return sign; } public static void main(String[] args) { String body = "{\"code\":\"123456\"}"; HashMap<String, String> headers = new HashMap<>(); headers.put("appkey", "test"); headers.put("nonce", "e38bcb56-7a6f-4452-bd07-34dcb74a042f"); headers.put("timestamp", "1626261718511"); String sign = sign(headers, body, "123456"); System.out.println(sign.toUpperCase()); // 结果 :03A000676EEC1C4A706535FDA39DB0D7 } }
标签:
java实现md5签名算法