package com.alibaba.doris.algorithm.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* MD5工具
*
* @author frank
*/
public class MD5Util {
private static MessageDigest md5Digist;
private static final char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
static {
try {
md5Digist = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/*
* 构造md5 String
* @param key
* @return
*/
public static String md5(String key) {
if (key == null) {
key = "";
}
try {
MessageDigest messageDigest = (MessageDigest) md5Digist.clone();
messageDigest.update(key.getBytes());
byte[] b = messageDigest.digest();
char[] charArr = new char[32];
for (int i = 0; i < b.length; i++) {
charArr[i * 2] = hex[b[i] >>> 4 & 0xF];
charArr[i * 2 + 1] = hex[b[i] & 0xF];
}
return new String(charArr);
} catch (CloneNotSupportedException e) {
throw new RuntimeException("md5:" + e,e);
}
}
/**
* 使用MD5散列的hash code
*
* @param key
* @return
*/
public static int md5HashCode(String key) {
md5Digist.reset();
md5Digist.update(key.getBytes());
byte[] b = md5Digist.digest();
int rv = ((int) (b[3] & 0xFF) << 24) | ((int) (b[2] & 0xFF) << 16) | ((int) (b[1] & 0xFF) << 8) | (b[0] & 0xFF);
return rv > 0 ? rv : -rv;
}
public static void main(String[] args) {
// md5Digist.reset();
// md5Digist.update("s".getBytes());
// byte[] b = md5Digist.digest();
// for(int i=0;i<b.length;i++){
// System.out.println(i+" "+b[i]);
// }
long start = System.currentTimeMillis();
System.out.println();
for (int i = 0; i < 100000; i++) {
String key = "ABC" + i;
int hash = md5HashCode(key);
System.out.println("hash : " + hash);
}
System.out.println("time:" + (System.currentTimeMillis() - start));
}
}