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

本文介绍了一种处理第三方接口请求的方法:首先使用TreeMap按ASCII码对参数进行排序,然后通过sha256_HMAC算法进行加密,并最终组合成URL参数。此方法适用于需要对参数进行安全传输的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候在请求第三方接口的时候,需要将参数根据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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值