栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MD5加密示例 ,开箱即用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MD5加密示例 ,开箱即用

package com.xx.xxxxx.common.util;

import lombok.extern.slf4j.Slf4j;

import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

@Slf4j
public class Md5SignUtil {
   private final static String  secret = "xxxxxxxxxx";
    
    public static String convertMD5(String inStr){

        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++){
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;

    }

    public static void main(String[] args) {
        Map map = new HashMap<>();

        map.put("userName", "老王");
        map.put("timestamp", System.currentTimeMillis());

        System.out.println(createSign(map));
    //    String sigCode = convertMD5("f570a4bb7e3923bc5aef28b22515edcb");
 
    }

    //创建签名
    public static String createSign(Map map) {
        String secretKEY = MD5Util.md5(secret);
        // 排序 true 升序
        Set keySet = sortByValue(map.keySet(), true);
        map(keySet,map);
        // 拼接签名串
        StringBuffer signStr = new StringBuffer();
        signStr.append(secretKEY);
        for (String str : keySet) {
            signStr.append(str);
            if (map.get(str) != null) {
                signStr.append(map.get(str));
            }
        }
        // 加密 md5(base64(signStr)+secretKEY)
        String encode = base64Utils.base64Encoder(String.valueOf(signStr));
        String sign = MD5Util.md5(encode + secretKEY);
        return sign;
    }
    public static void map(Set keySet,Map map){
        Map m = new HashMap<>();
        for (String key : keySet) {
            m.put(key,map.get(key));
        }
        log.info("###keySet= {}", m);
    }
    public static Set sortByValue(Set set, final Boolean flag) {
        List setList = new ArrayList(set);
        Collections.sort(setList, new Comparator() {
            @Override
            public int compare(String o1, String o2) {
                if (flag) {
                    return o1.toString().compareTo(o2.toString());
                } else {
                    return o2.toString().compareTo(o1.toString());
                }

            }

        });
        set = new linkedHashSet(setList);
        return set;
    }
}


final class MD5Util {
    public static void main(String[] args) {
        long t1 = System.currentTimeMillis();
        String md5 = md5("20");
        System.out.println(md5);
        long t2 = System.currentTimeMillis();
        System.out.println(t2 - t1);
    }

    protected final static Logger LOG = Logger.getLogger(MD5Util.class.getSimpleName());

    // 用来将字节转换成 16 进制表示的字符
    private static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
            'f' };
    private static Charset UTF8 = Charset.forName("UTF-8");

    private MD5Util() {
        throw new RuntimeException("can't init it");
    }

    public static String md5(String from) {
        byte fromByte[] = null;
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
            fromByte = from.getBytes(UTF8);
        } catch (Throwable e) {
            LOG.log(Level.SEVERE, "error while md5 for:" + from, e);
            throw new RuntimeException("error while md5 for:" + from, e);
        }
        byte bs[] = md.digest(fromByte);
        char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
        // 所以表示成 16 进制需要 32 个字符
        int k = 0; // 表示转换结果中对应的字符位置
        for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
            // 转换成 16 进制字符的转换
            byte byte0 = bs[i]; // 取第 i 个字节
            str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
            // >>> 为逻辑右移,将符号位一起右移
            str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
        }
        return new String(str);
    }
}



class base64Utils {
    
    public static String base64Encoder(String key) {
        base64.Encoder encoder = base64.getEncoder();
        String s = encoder.encodeToString(key.getBytes());
        System.out.println("加密:"+s);
        return s;
    }

    
    public static String base64Decoder(String encode) {
        base64.Decoder decoder = base64.getDecoder();
        String s = new String(decoder.decode(encode));
        System.out.println("解密"+ s);
        return s;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号