java实现md5签名算法

签名计算过程如下:
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"}
   /**
     * 签名
     * 
     * @param headers
     *            头信息
     * @param body
     *            body
     * @param secret
     *            secret
     * @return 签名后的串
     */
    public static String sign(Map headers, String body, String secret) {

        StringBuilder signBefore = new StringBuilder();
        // step1:先对请求参数排序
        TreeSet 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 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,接口自动化,java,servlet,开发语言)