1.什么是MD5呢?
任何数据(也包括软件),经过MD5加密后,会生成一串16字节的字符串,中华人民一般称其为“MD5值”。。
不同的数据,经过MD5后生成的MD5值,几乎都是不同的(有相同可能性,因为算法局限性,但是概率极低,在不涉及重大安全隐患比如国家机密等方面,这个相同概率可以忽略不记)。。
2.接下来写一下MD5的代码:
public class MD5Util {
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* 返回大写MD5
*
* @param origin
* @param charsetname
* @return
*/
private static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString.toUpperCase();
}
public static String MD5EncodeUtf8(String origin) {
origin = origin+ PropertiesUtil.getProperty("password.salt","");
return MD5Encode(origin, "utf-8");
}
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
2.在设置密码的时候调用这个方法即可
String md5Password = MD5Util.MD5EncodeUtf8(passwordNew);
//记着,这个时候传入的参数一定得是MD5Password,要不然就不识别
3.现在随着MD5的发展,出现了一本字典,即使MD5很难破解,这本字典也可以通过一定的时间将其破解。所以还可以在原有的MD5上加一个字符串,这样破解起来就特别难了代码呢,就是第二天里面代码块的一个内容:
public static String MD5EncodeUtf8(String origin) {
origin = origin+ PropertiesUtil.getProperty(“password.salt”,”“);
//为了解耦合,这个字符串放在一个properties中
// 下面是自己的一个字符串:
// password.salt = geelysdafaqj23ou89ZXcj@#@#
@#
#@KJdjklj;D../dSF.,
return MD5Encode(origin, "utf-8");
}