根據MD5算法的特點,我們可以把MD5加密過程看作是一個函數調用過程,建議必須做如下方式修改,這樣可以保證一定程度上你的網站用戶和數據安全:
1、修改MD5算法中的4個常數,這是最捷徑的作法,其特點是加密后的數據和加密前非常類似,但是不會被破解
2、多次加密,對MD5加密過的數據進行二次或三次加密,或者在每次加密后從重抽取部分值進行在加密,比如“我愛你”,加密后“1E6986ACEC7BAE541AB7B37B99260DAF”,我們可以取任意一部分進行再加密,比如取前18位“1E6986ACEC7BAE541”進行再加密得到“E3E0A1F51038849583263FE1F1B8B3E9”,這種做法修改很簡單,比如asp中調用是md5("password")那么你可以改成md5(left(md5("password"),16)),這樣以來就很安全了,就是你的數據被下載,破解的話也是不可能的
3、仿MD5加密,顧名思義,我們不采用MD5加密,而采用其他算法,然后取其中的部分散列,比如用SHA1或SHA64得到加密結果,然后取其中的32位或16位,很像MD5算法加密的結果,可以保證不被破解
十六位的md5加密
private static void Md5(String plainText ) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if(i<0) i+= 256;
if(i<16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
System.out.println("result: " + buf.toString());//32位的加密
System.out.println("result: " + buf.toString()。substring(8,24));//16位的加密
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Md5("12312312312312"); 結果:
本文鏈接:http://www.bj-meiling.com/a/webbase/jiamisuanfa20150511327.html