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();
|
}
|
|
}
|