记录一次自己手写签名的记录

该代码示例展示了如何在Java中创建一个基于HashMap的参数,按字母顺序排序,结合时间戳和特定key生成MD5签名。首先,对HashMap的键值对进行排序并URL编码,然后拼接成字符串,最后通过MD5算法计算签名。
摘要由CSDN通过智能技术生成

案例背景,第三方API,使用实体类的参数加上时间戳,key,按照字母顺序排列,拼接成字符串,再对次字符串进行MD5计算,得出的结果就是sign,服务端也根据该方法进行sign计算,

此处以HashMap为例


import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Test23 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        HashMap<String, String> hashMap=new HashMap<String, String>();
        hashMap.put("a","123");
        hashMap.put("b","234");
        hashMap.put("c","345");
        StringBuilder stringBuilder = new StringBuilder();
        Set<String> strings = hashMap.keySet();
        List<String> collect = strings.stream().sorted().collect(Collectors.toList());

        for (int i = 0; i < collect.size(); i++) {
            String s = collect.get(i);
            String value = hashMap.get(s);
            //对中文进行URL编码
            value = URLEncoder.encode(value, String.valueOf(StandardCharsets.UTF_8));
            if (i == 0) {
                stringBuilder.append(s).append("=").append(value);
            } else {
                stringBuilder.append("&").append(s).append("=").append(value);
            }
        }


        System.out.println(stringBuilder);
        String md5 = getMD5(stringBuilder.toString());
        System.out.println(md5);
    }

    public static String getMD5(String s) {
        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        try {
            byte[] btInput = s.getBytes(StandardCharsets.UTF_8);
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值