更新時(shí)間:2022-08-22 10:48:49 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽4760次
MD5加密很常用,比如數(shù)據(jù)庫(kù)中密碼等敏感字段需要加密存儲(chǔ),核對(duì)密碼時(shí)先以同樣的方式對(duì)用戶輸入的密碼進(jìn)行加密,再與數(shù)據(jù)庫(kù)中存儲(chǔ)的密碼比較。
MD5加密有很多種實(shí)現(xiàn)方式,此處介紹2種。
public class MD5Util {
public static String getMD5Str(String str) {
byte[] digest = null;
try {
MessageDigest md5 = MessageDigest.getInstance("md5");
digest = md5.digest(str.getBytes("utf-8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//16是表示轉(zhuǎn)換為16進(jìn)制數(shù)
String md5Str = new BigInteger(1, digest).toString(16);
return md5Str;
}
}
上面是自己封裝,太麻煩,Spring已經(jīng)給我們封裝好了。
String md5Str = DigestUtils.md5DigestAsHex("原串".getBytes());
只使用md5加密是不行的,很容易被破解。常見(jiàn)的做法有:
先對(duì)原串進(jìn)行一些處理,比如先給它拼接一個(gè)字符串常量,再進(jìn)行md5加密。即使對(duì)方解密,也獲取不到原串。
使用多種加密算法。比如先用md5加密,再對(duì)加密的結(jié)果使用其它加密算法進(jìn)行加密。比如先使用md5加密,對(duì)加密的結(jié)果再次使用md5加密。
這2種方式方式經(jīng)常一起使用。
第一種確實(shí)有問(wèn)題,我測(cè)試了幾百萬(wàn)個(gè)數(shù)據(jù),不符合的數(shù)據(jù)加密后長(zhǎng)度集中在29、30、31,
這幾百萬(wàn)個(gè)數(shù)據(jù)中沒(méi)有出現(xiàn)大于32的,數(shù)據(jù)庫(kù)字段長(zhǎng)度設(shè)置為32字符,能存儲(chǔ)得下,依然可以使用,只不過(guò)數(shù)據(jù)長(zhǎng)度不一定是32位。
第二種加密后是32位的,無(wú)論是性能、可靠性、編碼量都比其它方式優(yōu)異,推薦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743