MD5Util

package com.cmcc.hybj.payment.framework.crypt;

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

import org.apache.shiro.crypto.hash.Md5Hash;

import com.google.common.base.Joiner;

/**
 * MD5Util
 *
 * @author gy
 */
public class MD5Util {

    /**
     * 通过MD5算法加密;
     *
     * @param pwd
     */
    public static String encoder(String pwd) {
        StringBuffer sb = new StringBuffer();
        try {
            //1指定算法类型;
            MessageDigest digest = MessageDigest.getInstance("MD5");
            //2将需要加密的字符串转换成byte数组;
            byte[] bs = digest.digest(pwd.getBytes());
            //3通过遍历bs 生成32位的字符串;
            //最后字符串有个拼接的过程;
            for (byte b : bs) {
                int i = b & 0xff; //int 类型的i 是4个字节占32位;
                //int 类型的i转换成16进制字符;
                String hexString = Integer.toHexString(i);
                if (hexString.length() < 2) {//补零的过程,因为生成的时候有的是一位有的是两位所以需要有个补零的过程;
                    hexString = "0" + hexString;
                }
                sb.append(hexString);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {//找不到指定算法的错误;
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 增加的MD5加密 可以用于
     * shiro的md5加密
     *
     * @param str  源字符串
     * @param salt 盐
     * @param num  随机数
     * @return md5Str
     */
    public static String superMd5(String str, String salt, int num) {
        return new Md5Hash(str, salt, num).toString();
    }

    /**
     * 将指定的字符串用MD5算法加密
     *
     * @param inStr 源字符串
     * @return 返回加密后的字符串(默认英文大写)
     */
    public static String string2MD5(String inStr) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = md5.digest(inStr.getBytes());

            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }

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

    /**
     * 将字符串数组转换为字符串后进行加密
     *
     * @param strArray
     * @return
     */
    public static String array2MD5(String[] strArray) {
        String linkStr = Joiner.on("").join(strArray);
        return string2MD5(linkStr);
    }

    /**
     * 对给出的String数组进行MD5校验
     *
     * @param strArray
     * @param md5Val
     * @return
     */
    public static Boolean macValidate(String[] strArray, String md5Val) {
        String iVal = array2MD5(strArray);
        if (iVal.equals(md5Val)) {
            return true;
        }
        return false;
    }

    /**
     * 签名
     * @param plainText
     * @param enc
     * @return
     */
    public static String MD5(String plainText, String enc) {
        String md5 = new String();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes(enc));
            byte[] b = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0){
                    i += 256;
                }
                if (i < 16){
                    buf.append("0");
                }
                buf.append(Integer.toHexString(i));
            }
            md5 = buf.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5;

    }

}

原文地址:https://www.cnblogs.com/gyadmin/p/8308451.html