zoukankan      html  css  js  c++  java
  • 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;

        }

    }

  • 相关阅读:
    【BZOJ5286】[HNOI2018]转盘(线段树)
    【BZOJ2003】[HNOI2010]矩阵(搜索)
    【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
    【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
    【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)
    【BZOJ1925】[SDOI2010]地精部落(动态规划)
    【BZOJ1856】[SCOI2010]字符串(组合数学)
    【BZOJ1826】[JSOI2010]缓存交换(贪心)
    【BZOJ1823】[JSOI2010]满汉全席(2-sat)
    【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
  • 原文地址:https://www.cnblogs.com/gyadmin/p/8308451.html
Copyright © 2011-2022 走看看