package com.vci.starter.web.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.security.MessageDigest; /*** * MD5加密 * @author weidy */ public class Md5 { /** * 日志对象 */ private static Logger logger = LoggerFactory.getLogger(Md5.class); public Md5() {} /** * @desc 将字符串转换为的MD5 * @param v 来源字符串 * @return 转换后的MD5字符串 * @throws Exception */ public static String md5(String v) { if (v == null) { return null; } try{ MessageDigest md = MessageDigest.getInstance("MD5"); return toHex(md.digest(v.getBytes())); }catch(Exception e){ return null; } } /** * @desc 两次MD5加密 * @param sourceString 加密前的字符串 * @return 两次加密后的字符串 * @throws Exception */ public static String twoTimesMd5(String sourceString) throws Exception { if(sourceString == null) { return null; } return md5(md5(sourceString)); } /** * @desc 对比传入的字符串生成的MD5于md5String是否相等 * @param md5String 用于对比的md5字符串 * @param sourceString 加密前的字符串 * @return 对比md5后的值,true表示相等 */ public static boolean equalMd5(String md5String, String sourceString) { if(md5String == null || sourceString == null) { return false; }else { try { if(md5String.equals(twoTimesMd5(sourceString))) { return true; }else { return false; } } catch (Exception e) { e.printStackTrace(); return false; } } } /** * @desc md5一次后进行对比,这个主要是为登录验证密码用的,因为前台JS会先进行MD5加密一次 * @param md5String 用于对比的md5字符串 * @param sourceString 加密前的字符串 * @return true表示相等 */ public static boolean equalOneMd5(String md5String, String sourceString) { if(md5String == null || sourceString == null) { return false; } else { try { String ms = md5(sourceString); if(md5String.equals(ms)) { return true; }else { return false; } }catch (Exception e) { if(logger.isErrorEnabled()) { logger.error("对比md5的时候出现了错误", e); } return false; } } } /** * 转换为hex的方式 * @param buffer 要转换的字节数组 * @return 转换后的字符串 */ private static String toHex(byte buffer[]) { StringBuffer sb = new StringBuffer(32); String s = null; for (int i = 0; i < buffer.length; i++) { s = Integer.toHexString((int) buffer[i] & 0xff); if (s.length() < 2) { sb.append('0'); } sb.append(s); } return sb.toString(); } }