/**
* 对密码进行加密和验证的程序
* @author guoh
*
*/
public class Md5 {
privatefinal static String[] hexDigits = {"0" ,"1", "2","3", "4", "5", "6", "7","8", "9", "a" ,"b", "c","d", "e", "f"};
/**
* 把inputString加密
* @param inputSring
* @return
*/
publicstatic String createPassword(String inputSring){
returnencodeByMD5(inputSring);
}
/**
* 对字符串进行Md5进行编码
* @param originString
* @return
*/
publicstatic String encodeByMD5(String originString){
if(originString!= null){
try{
MessageDigestmd = MessageDigest.getInstance("MD5");
byte[]results = md.digest(originString.getBytes());
StringresultString = byteArrayToHexString(results);
returnresultString.toUpperCase();
}catch (NoSuchAlgorithmException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
returnnull;
}
/**
* 转换字节数组为十六进制形式的字符串
* @param str
* @return
*/
publicstatic String byteArrayToHexString(byte[] str){
StringBufferresultSb = new StringBuffer();
for(int i = 0; i < str.length; i++) {
resultSb.append(byteToHexString(str[i]));
}
returnresultSb.toString();
}
/**
* 将一个字节转换成十六进制形式的字符串
* @param b
* @return
*/
publicstatic String byteToHexString(byte b){
intn = b;
if(n< 0) n = 256 + n;
intd1 = n / 16;
intd2 = n % 16;
returnhexDigits[d1] +hexDigits[d2];
}
/**
* 验证输入的密码是否正确
* @param password
* @param inputString
* @return
*/
publicstatic boolean authenticatePassword(String password,String inputString){
if(password.equals(encodeByMD5(inputString))){
returntrue;
}else{
returnfalse;
}
}
publicstatic void main(String[] args) {
Stringpassword =Md5.createPassword("888888");
System.out.println("对888888用MD5加密之后的字符串:"+password);
StringinputString = "8888";
System.out.println("8888与 密码匹配?"+Md5.authenticatePassword(password, inputString));
inputString= "888888";
System.out.println("888888与密码匹配?"+Md5.authenticatePassword(password, inputString));
}
}