import java.security.MessageDigest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class MD5 {
private final Log logger = LogFactory.getLog(MD5.class);
private String inStr;
private MessageDigest md5;
/* 下面是构造函数 */
public MD5(String inStr) {
this.inStr = inStr;
try {
this.md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
logger.fatal("", e);
}
}
/* 下面是关键的md5算法 */
public String compute() {
char[] charArray = this.inStr.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = this.md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
/* 下面是关键的md5算法 */
public String computeWithUTF8() {
try {
byte[] btInput = this.inStr.getBytes("UTF-8"); // 必须制定utf-8字符集。
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < md.length; i++) {
int val = ((int) md[i]) & 0xff;
if (val < 16) {
sb.append("0");
}
sb.append(Integer.toHexString(val));
}
return sb.toString();
} catch (Exception e) {
return null;
}
}
}