MD5,SHA1,SHA256等 哈希散列工具类

MD5,SHA1,SHA256等 哈希散列工具类

package com.wbc.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5,SHA1,SHA256等 哈希散列
 * @author wangbingchen
 * @Description
 * @create 2021-11-25 16:13
 */
public class HashUtil {

    enum HashUtilType{
        MD5("MD5"),
        SHA1("SHA-1"),
        SHA224("SHA-224"),
        SHA256("SHA-256"),
        SHA384("SHA-384"),
        SHA512("SHA-512"),
       ;

        private MessageDigest messageDigest;


        HashUtilType(String type){
            try {
                messageDigest = MessageDigest.getInstance(type);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }


    }



    private HashUtil(){

    }



    public static String md5(String str) {
        return md5(str.getBytes());
    }

    public static String md5(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.MD5);
    }

    public static String sha1(String str) {
        return sha1(str.getBytes());
    }

    public static String sha1(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.SHA1);
    }

    public static String sha224(String str) {
        return sha224(str.getBytes());
    }

    public static String sha224(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.SHA224);
    }

    public static String sha256(String str) {
        return sha256(str.getBytes());
    }

    public static String sha256(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.SHA256);
    }

    public static String sha384(String str) {
        return sha384(str.getBytes());
    }

    public static String sha384(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.SHA384);
    }

    public static String sha512(String str) {
        return sha512(str.getBytes());
    }

    public static String sha512(byte[] byteArray) {
        return hashcode(byteArray,HashUtilType.SHA512);
    }




    /**
     *
     * @param  byteArray
     * @return
     */
    public synchronized static String hashcode(byte[] byteArray, HashUtilType type) {
        try {

            byte[] md5Bytes = type.messageDigest.digest(byteArray);

            StringBuilder hexValue = new StringBuilder();
            for (byte md5Byte : md5Bytes) {
                int val = ((int) md5Byte) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }

            return hexValue.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }

    }


    /**
     * 生成32位 小写
     *
     * @param str
     * @return
     */
    public static String hashcode(String str, HashUtilType type) {
        return hashcode(str.getBytes(),type);

    }

    /**
     * 生成16位 md5 小写
     *
     * @param str
     * @return
     */
    public static String md5Short(String str) {
        return md5(str).substring(8, 24);
    }



    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
        String str = "123456";
        System.out.println("字符串:"+str);
        System.out.println("16位 小写:"+md5Short(str));
        System.out.println("32位 小写:"+md5(str));
        System.out.println("40位 小写:"+sha1(str));
        System.out.println("56位 小写:"+sha224(str));
        System.out.println("64位 小写:"+sha256(str));
        System.out.println("96位 小写:"+sha384(str));
        System.out.println("128位 小写:"+sha512(str));
    }



}

posted @ 2022-11-22 10:22  不一样的爪哇  阅读(78)  评论(0编辑  收藏  举报