将属性根据ASCII码升序排序并使用sha56_Hmac加密然后拼接成url请求第三方接口最后解析

有时候在请求第三方接口的时候,需要将属性根据ASCII码排序并使用sha56_Hmac加密组合成url,本文将描述一下过程,并且给广大码农提供一个思路

public class Test {

    @Test
    public void getCoinInfo() {

        //TreeMap会根据key对应的ASCII码进行排序,默认:升序
        Map<String, Object> params = new TreeMap<>();

        params.put("属性一", 1);
        params.put("属性二", 2);        
        params.put("属性三", 3);

        //这时,就可以用urlParam去请求第三方接口了
        String urlParam = getUrlParam(params);

        System.out.println(result);
    }

    public static String getUrlParam(Map<String, Object> params) {
        StringBuilder result = new StringBuilder();
        if (params != null) {
            for (String key : params.keySet()) {
                Object value = params.get(key);
                //效果:属性一:1,属性二:2,
                result.append(key).append(":").append(value).append(",");
            }
            String tempString = result 
            try {
                //参数一:要加密的数据   参数二:用于生成消息摘要的HMAC变体的共享密钥   最后转换为大写
                String sign = sha256_HMAC(tempString, SECRET).toUpperCase();
                //将加密后的数据添加到属性后边
                result.append("sign").append(":").append(sign);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //这时,返回的字符串就是根据ASCII码排序并使用sha56_Hmac加密后的数据
        return result.toString();
    }

    /**
     * sha56_Hmac加密
     * @param message  要加密的数据
     * @param secret   用于生成消息摘要的HMAC变体的共享密钥
     * @return
     * @throws Exception
     */
    public static String sha256_HMAC(String message, String secret) throws Exception{
        Mac mac = Mac.getInstance(HmacSHA256);
        SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), HmacSHA256);
        mac.init(keySpec);
        byte[] bs = mac.doFinal(message.getBytes());
        return byte2Hex(bs);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41960595/article/details/81087259
今日推荐