content: package com.jingewenku.abrahamcaijin.commonutil.encryption;
  
  import com.jingewenku.abrahamcaijin.commonutil.ConvertUtils;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.nio.ByteBuffer;
  import java.nio.channels.FileChannel;
  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  
  /**
   * @Description:主要功能:MD5加密 不可逆（Message Digest，消息摘要算法）
   * @Prject: CommonUtilLibrary
   * @Package: com.jingewenku.abrahamcaijin.commonutil.encryption
   * @author: AbrahamCaiJin
   * @date: 2017年05月16日 15:56
   * @Copyright: 个人版权所有
   * @Company:
   * @version: 1.0.0
   */
  
  public class MD5Utils {
  
      private MD5Utils() {
          throw new UnsupportedOperationException("cannot be instantiated");
      }
  
      /**
       * MD5加密
       */
      public static String encryptMD5(String securityStr) {
          byte[] data = securityStr.getBytes();
          MessageDigest md5 = null;
          try {
              md5 = MessageDigest.getInstance("MD5");
              md5.update(data);
          } catch (NoSuchAlgorithmException e) {
              e.printStackTrace();
          }
          byte[] resultBytes = md5.digest();
          StringBuilder builder = new StringBuilder();
          for (int i = 0; i < resultBytes.length; i++) {
              if (Integer.toHexString(0xFF & resultBytes[i]).length() == 1) {
                  builder.append("0").append(
                      Integer.toHexString(0xFF & resultBytes[i]));
              } else {
                  builder.append(Integer.toHexString(0xFF & resultBytes[i]));
              }
          }
          return builder.toString();
      }
  
      /**
       * 获得字符串的md5大写值
       *
       * @param str 待加密的字符串
       * @return md5加密后的大写字符串
       */
      public static String getMD5UpperString(String str) {
          return encryptMD5(str).toUpperCase();
      }
  
      /**
       * 获得文件的md5值
       *
       * @param file 文件对象
       * @return 文件的md5
       */
      public static String getFileMD5String(File file) {
          String ret = "";
          FileInputStream in = null;
          FileChannel ch = null;
          try {
              in = new FileInputStream(file);
              ch = in.getChannel();
              ByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,
                  file.length());
              MessageDigest md5 = MessageDigest.getInstance("MD5");
              md5.update(byteBuffer);
              ret = ConvertUtils.bytesToHexString(md5.digest());
          } catch (IOException e) {
              e.printStackTrace();
          } catch (NoSuchAlgorithmException e) {
              e.printStackTrace();
          } finally {
              if (in != null) {
                  try {
                      in.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              if (ch != null) {
                  try {
                      ch.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
          return ret;
      }
  
      /**
       * 获得文件md5值大写字符串
       *
       * @param file 文件对象
       * @return 文件md5大写字符串
       */
      public static String getFileMD5UpperString(File file) {
          return getFileMD5String(file).toUpperCase();
      }
  
      /**
       * 校验文件的md5值
       *
       * @param file 目标文件
       * @param md5  基准md5
       * @return 校验结果
       */
      public static boolean checkFileMD5(File file, String md5) {
          return getFileMD5String(file).equalsIgnoreCase(md5);
      }
  
      /**
       * 校验字符串的md5值
       *
       * @param str 目标字符串
       * @param md5 基准md5
       * @return 校验结果
       */
      public static boolean checkMD5(String str, String md5) {
          return encryptMD5(str).equalsIgnoreCase(md5);
      }
  
      /**
       * 获得加盐md5，算法过程是原字符串md5后连接加盐字符串后再进行md5
       *
       * @param str  待加密的字符串
       * @param salt 盐
       * @return 加盐md5
       */
      public static String getMD5AndSalt(String str, String salt) {
          return encryptMD5(encryptMD5(str).concat(salt));
      }
  
  }
  