对json字符串进行md5加密工具类

2022-04-24 10:13:00
admin
原创
2283
摘要:对json字符串进行md5加密工具类

对json字符串进行md5加密工具类

首先对json字符串进行排序,然后进行md5加密,用于比较加密之后的字符串是否先等

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.List;
import java.util.TreeMap;
public class Test {
    public static void main(String[] args) {
        String req = "{\n" +
                "\"requestTime\" :\"20190101120001\",\n" +
                "\"requestValue\" :\"1000\",\n" +
                "\"requestValue1\" :\"1000\",\n" +
                "\"requestKey\" :\"key\"\n" +
                "}";

        String req2 = "{\n" +
                "\"requestTime\" :\"20190101120002\",\n" +
                "\"requestValue\" :\"1000\",\n" +
                "\"requestValue1\" :\"1000\",\n" +
                "\"requestKey\" :\"key\"\n" +
                "}";
        //全参数比对,所以两个参数MD5不同
        String dedupMD5 =dedupParamMD5(req);
        String dedupMD52 =dedupParamMD5(req2);
        System.out.println("req1MD5 = "+ dedupMD5+" , req2MD5="+dedupMD52);
        //去除时间参数比对,MD5相同
        String dedupMD53 = dedupParamMD5(req,new String[]{"requestTime","requestValue1"});
        String dedupMD54 = dedupParamMD5(req2,new String[]{"requestTime","requestValue1"});
        System.out.println("req1MD5 = "+ dedupMD53+" , req2MD5="+dedupMD54);
    }

    /**
     * 对json字符串进行加密,然后过滤掉制定的参数
     * @param reqJSON
     * @param excludeKeys
     * @return
     */
    public static String dedupParamMD5(final String reqJSON, String... excludeKeys) {
        //先对json字符串进行排序,然后过滤掉制定后面的key
        JSONObject arg = JSONObject.parseObject(reqJSON);
        String decreptParam= JSON.toJSONString(arg, SerializerFeature.MapSortField);
        TreeMap paramTreeMap = JSON.parseObject(decreptParam, TreeMap.class);
        if (excludeKeys!=null) {
            List<String> dedupExcludeKeys = Arrays.asList(excludeKeys);
            if (!dedupExcludeKeys.isEmpty()) {
                for (String dedupExcludeKey : dedupExcludeKeys) {
                    paramTreeMap.remove(dedupExcludeKey);
                }
            }
        }
        String paramTreeMapJSON = JSON.toJSONString(paramTreeMap);
        String md5deDupParam = jdkMD5(paramTreeMapJSON);
        return md5deDupParam;
    }

    /**
     * 进行md5加密
     * @param src
     * @return
     */
    private static String jdkMD5(String src) {
        String res = null;
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] mdBytes = messageDigest.digest(src.getBytes());
            res = DatatypeConverter.printHexBinary(mdBytes);
        } catch (Exception e) {
        }
        return res;
    }
}

发表评论
评论通过审核之后才会显示。
文章分类
联系方式
联系人: 郑州-小万
电话: 13803993919
Email: 1027060531@qq.com
QQ: 1027060531
网址: www.wanhejia.com