package com.hehenian.biz.common.util;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
/**
* MD5工具类
*
* @author liuzgmf
*
*/
public class Md5Utils {
private static final String sv = "0plo98ikmju76yhnbgt54rfvcde32wsxzaq1";
/**
* 给文件 md5
* @param file
* @return
* @author: zhangyunhmf
* @date: 2014年10月17日下午3:48:33
*/
public static String getMd5ByFile(File file) {
try {
return DigestUtils.md5Hex(FileUtils.readFileToByteArray(file));
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
/**
* MD5 摘要,使用系统缺省字符集编码
*
* @param input
* @return
*/
public static String MD5(String input) {
return MD5(input, Charset.defaultCharset());
}
/**
* MD5 摘要
*
* @param input
* @param charset
* @return
*/
public static String MD5(String input, String charset) {
return MD5(input, Charset.forName(charset));
}
/**
* MD5 摘要
*
* @param input
* @param charset
* @return
*/
public static String MD5(String input, Charset charset) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md.update(input.getBytes(charset));
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
byte tmp[] = md.digest();
char str[] = new char[16 * 2];
int k = 0;
for (int i = 0; i < 16; i++) {
byte byte0 = tmp[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
String result = new String(str);
return result;
}
/**
* 用MD5算法进行加密
*
* @param pStrPW
* 待被加密的字符串
* @return 加密后的字符串
*/
public static String crypt(String pStrPW) {
String strCrypt = hash(pStrPW);
if (strCrypt.length() > 0) {
strCrypt += sv;
strCrypt = hash(strCrypt);
}
return strCrypt;
}
/**
* MD5算法进行散列
*
* @param str
* 待散列的字符串
* @return 散列后的字符串
*/
public static String hash(String str) {
String result = "";
if (str == null) { // 如果传入参数为空,则返回空字符串
return result;
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] data = str.getBytes();
int l = data.length;
for (int i = 0; i < l; i++) {
md.update(data[i]);
}
byte[] digest = md.digest();
result = ByteUtils.byteArrayToHexString(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(), e);
}
return result;
}
/**
* 验证MD5加签, 验证加签是否正确
*
* @param sign
* 传入的加签字符
* @param secret
* 密匙
* @param signString
* 被加签字符串
* @return
*/
public static boolean checkMD5(String sign, String secret, String signString) {
String md5Sign = Md5Utils.MD5(signString + secret, "UTF-8");
if (md5Sign.equals(sign)) {
return true;
} else {
return false;
}
}
public static void main(String args[]) {
//String pwd = "123456";
String pwd = "/1.0/auth?key=3&ts=1414991037&ve=1.0.0&secret=%21%40%23JSD";
if (args != null && args.length > 0) {
pwd = args[0];
}
try {
// System.out.println(Md5Utils.hash(pwd));
// System.out.println(Md5Utils.crypt(pwd));
// System.out.println(Md5Utils.MD5(pwd,"UTF-8"));
System.out.println(getMd5ByFile(new File("C:/Temp/放款/publish_template2014-11-01-20141117.xls")));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main1(String[] args) {
String s = "userId125orderSN3reqTime1499999";
String sign = "501ad0ba7a170317663e6c4fdab0a8a4";
String cecret = "DJKC#$%CD%des$";
System.out.println(checkMD5(sign, cecret, s));
}
}