欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

base64加密和MD5加密

程序员文章站 2024-03-20 10:16:28
...

文章目录


今天项目开发遇到了一个需要加密的需求,其加密方式大概为将请求的json串的所有字符按照升序从新排列,再将秘钥放拼接在排序后的字符串头,然后进行md5(32位)加密再转成小写即获得参数签名结果sign值。最后把sing值拼接在请求json前,进行base64加密后就为最后的请求参数

示例

1.josn串:
{"source":"1","version":"2.0","idently_id":" CMV14223786","data":{}}
2.排序后:
"""""""""""""",,,.01122234678::::CMV_aacdddeeeiiilnnoorrssttuvy{{}}
3.sign为:
sign = downcase(md5(secretKey+排序后json))
4.最后request为:
req=base64(sign + 排序前json串)

代码

base64和md5都是使用jdk自带api
1.排序:

private String sortJson(String json) {
        char[] chars = json.toCharArray();
        Arrays.sort(chars);
        return  new String(chars);
    }

2.签名:

    public String sign(String json,String key){
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            md5.update((key + sortJson(json)).getBytes("UTF-8"));
            String md5String=new BigInteger(1, md5.digest()).toString(16);
            return fillMD5(md5String).toLowerCase();
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }


    private String fillMD5(String md5){
        //如果不够32位则回调自身补零,最后返回32位长度的签名
        return md5.length()==32?md5:fillMD5("0"+md5);
    }

3.base64加密:

    private String base64Encode(String str){
        if (str == null || "".equals(str)){
            return "";
        }
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] encode = encoder.encode(str.getBytes());
        return  new String(encode);
    }