JSP使用MD5加密進行登入驗證?

Tags: 使用者,

網路上帶給我們很多便捷,同時也出現很多問題,如安全。有時候很多網站對於使用者資訊沒有進行加密處理,導致資料庫洩露後用戶的資訊也被曝光,如此一來便引起使用者很大的不便。之前做過一個簡單的登陸驗證,現在把MD5加密加入登陸驗證裡面。

我的具體思路是這樣的。這裡只做簡單的加密驗證,只對使用者密碼進行加密。首先使用者註冊的時候在我們獲取到密碼明文,然後呼叫MD5類中getMD5()方法,此方法是將明文轉化為密文的關鍵演算法(關於MD5演算法大家可以在網上查詢到資料),明文經過getMD5()方法處理後函式返回密文字串。然後再將密文存入資料庫,如此一來即使資料庫被人拿到他也無法獲取到使用者密碼,因此可以說使用者安全性得到了大大的提高(如admin經過getMD5處理後得到的是21232f297a57a5a743894a0e4a801fc3)

關於驗證方法其實也很簡單,只要圍繞著密文這個關鍵就行,比如使用者輸入賬號admin密碼123456,但是資料庫存的資料卻不是123456而是他的密文,所以我們先寫個方法check()校驗使用者正確的方法,這個方法需要傳入兩個引數,username和password(這兩個引數就是從網頁傳來,使用者輸入的內容);首先根據使用者傳來的賬號admin對資料庫進行查詢,找到admin對應的密碼的密文設為X,然後把使用者傳來的密碼根據getMD5()方法獲取到期MD5碼,我們需要比較的就是這個MD5碼。簡單點說就是把資料庫密碼的密文X來和使用者傳來的密碼的密文相比較就行了。

下面貼上關鍵程式碼:

getConnection()方法的程式碼(獲取資料庫連線):

publicclass JdbcUtil {

privatestaticfinal String className="com.mysql.jdbc.Driver";

privatestaticfinal String url="jdbc:mysql://localhost:3306/test";

privatestaticfinal String user="root";

privatestaticfinal String password="root";

privatestatic Connection conn;

privatestatic Statement st;

publicstatic Connection getConnection()

{

try {

Class.forName(className);

} catch (ClassNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

conn=DriverManager.getConnection(url, user, password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

returnconn;

}

}

getMD5()的程式碼(MD5加密):

Package www.mwcly.cn

publicfinalstatic String getMD5(String s) {

char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'a', 'b', 'c', 'd', 'e', 'f' };

try {

byte[] strTemp = s.getBytes();

// 使用MD5建立MessageDigest物件

MessageDigest mdTemp = MessageDigest.getInstance("MD5");

mdTemp.update(strTemp);

byte[] md = mdTemp.digest();

int j = md.length;

char str[] = newchar[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte b = md[i];

//System.out.println((int)b);

// 將沒個數(int)b進行雙位元組加密

str[k++] = hexDigits[b >> 4 & 0xf];

str[k++] = hexDigits[b & 0xf];

}

returnnew String(str);

} catch (Exception e) {

returnnull;

}

}

check()方法程式碼(校驗使用者登入):

publicboolean check(String username,String password) {

// TODO Auto-generated method stub

//先把得到的密碼轉化成MD5碼 用mdpass儲存

String mdpass=MD5.getMD5(password);

String pass="";

conn=JdbcUtil.getConnection();

String sql="select password from admin where username ='"+username+"'";

try {

st = (Statement) conn.createStatement(); //建立用於執行靜態sql語句的Statement物件,st屬區域性變數

ResultSet rs = st.executeQuery(sql); //執行sql查詢語句,返回查詢資料的結果集

while (rs.next()) { // 判斷是否還有下一個資料

// 根據欄位名獲取相應的值

pass=rs.getString("password");

}

conn.close(); //關閉資料庫連線

} catch (SQLException e) {

System.out.println("查詢資料失敗");

}

//輸出查到的值www.huaihua365.net與之前MD5碼比較

if(pass.equals(mdpass)){

returntrue;

} else

returnfalse;

}

相關問題答案