签名计算过程如下:
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签名算法