這篇文章主要介紹“MD5加密驗證登錄密碼怎么實現(xiàn)”,在日常操作中,相信很多人在MD5加密驗證登錄密碼怎么實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MD5加密驗證登錄密碼怎么實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比平房網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式平房網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋平房地區(qū)。費(fèi)用合理售后完善,十載實體公司更值得信賴。
加密,指的是對數(shù)據(jù)進(jìn)行轉(zhuǎn)換以后,數(shù)據(jù)變成了另一種格式,并且除了拿到解密方法的人,沒人能把數(shù)據(jù)轉(zhuǎn)換回來。
因此,加密通常用于網(wǎng)絡(luò)通信。因為網(wǎng)絡(luò)上的通信數(shù)據(jù),任何人都有可能會拿到,把數(shù)據(jù)加密后再傳送,送達(dá)以后由對方解密后再查看,就可以防止網(wǎng)絡(luò)上的偷窺。
MD5是一種常用的的加密算法。
01
工具類:MD5Util
package com.zd.ems.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* MD5加密解密
*
*/
public class MD5Util {
/**
* MD5加密方法
* @param str不允許為null 傳入的需要進(jìn)行MD5加密的String字符串,
* @return MD5加密后的字符串
* @throws NoSuchAlgorithmException
*/
public static String EncodeByMD5(String str) throws NoSuchAlgorithmException{
//獲取一個信息摘要器
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//通過將字符串填充到摘要器中并進(jìn)行hash計算得到一個長度為16的byte數(shù)組
byte[] weitHandleByte = messageDigest.digest(str.getBytes());
//臨時存放weitHandleByte
int tempWeitHandleByte;
//創(chuàng)建一個StringBuffer 用于裝在載加密后的字符
StringBuffer sb = new StringBuffer();
//遍歷獲取到的byte數(shù)組,生成具體的MD5密碼
for (byte b : weitHandleByte) {
tempWeitHandleByte = b;
if(tempWeitHandleByte<0)
tempWeitHandleByte+=265;
if(tempWeitHandleByte<16)
sb.append("0");
sb.append(Integer.toHexString(tempWeitHandleByte));
}
return getBegginAndEndStr(sb.toString().substring(8, 24));
}
/**
* @param str不允許為null 需要核對的字符串
* @param codeStr str經(jīng)過MD5加密后的字符串
* @return 返回對比結(jié)果
* @throws NoSuchAlgorithmException
*/
public static boolean DecodeByMD5(String str,String codeStr) throws NoSuchAlgorithmException{
String temp = EncodeByMD5(str);
if(temp.startsWith(codeStr.substring(0, 5))&&temp.endsWith(codeStr.substring(11,16)))
return true;
else
return false;
}
/**
* 為了防止暴力破解密碼,因此需要經(jīng)過截取前5個字符和后5個字符以及隨機(jī)生成的6個字符拼接字符串
* @param str MD5加密后的字符串
* @return 返回經(jīng)過截取前5個字符和后5個字符以及隨機(jī)生成的6個字符拼接而成的字符串
*/
private static String getBegginAndEndStr(String str){
//截取MD5加密后的前5個字符
String beggin = str.substring(0,5);
//截取MD5加密后的后5個字符
String end = str.substring(11,16);
//創(chuàng)建6個隨機(jī)的字符
String middle="";
for(int i=0;i<3;i++)
middle = middle+Integer.toHexString((int)(16+Math.random()*(265-16+1)));
return beggin+middle+end;
}
}
02
新增用戶時對密碼加密
//用戶輸入123456//對輸入的密碼進(jìn)行加密:使用MD5Util.EncodeByMD5("要加密的密碼”)employee.setPassword(MD5Util.EncodeByMD5(employee.getPassword()));//數(shù)據(jù)庫中保存的密碼格式65d718af4e40b3f2
03
用戶登錄時檢驗密碼正確性
//首先根據(jù)用戶名查詢用戶對象:用戶名要唯一Employee emp=empService.login(username);//如果用戶存在if(!StringUtils.isEmpty(emp)) { //MD5驗證密碼:其實就是對數(shù)據(jù)庫中的密碼進(jìn)行解密 Boolean check=MD5Util.DecodeByMD5(password, emp.getPassword()); //如果數(shù)據(jù)庫中解密后的密碼與登錄頁面輸入的密碼一致,登錄成功 if(check) { HttpSession session = request.getSession(); session.setAttribute("employee", emp); result.put("employee",emp); result.put("userExsit",true); }else { result.put("userExsit",false); }
到此,關(guān)于“MD5加密驗證登錄密碼怎么實現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享標(biāo)題:MD5加密驗證登錄密碼怎么實現(xiàn)
文章位置:http://weahome.cn/article/jgddhc.html