一、概述
MD5(Message Digest Algorithm 5),是一種散列演算法,是不可逆的,即通過md5加密之后沒辦法得到原文,沒有解密演算法,
在一般的專案中都會有登錄注冊功能,最簡單的,登錄注冊程序完全沒有加密,存盤在資料庫的密碼也是明文,安全性是很差的,萬一資料泄露就不好了(表一),所以,通過MD5將密碼加密后保存在資料庫中(表二),在登錄的程序中后端將從前端獲取到的密碼加密,對照資料庫中已經加密的密碼,
但是一般加密演算法固定,很容易破解,安全系數低,就我所知,有很多網站可以直接破解密文,為了提高安全性,可以采取加鹽的方式,生成一組隨機串,保存在資料庫中,然后混雜在原來的密碼中,再通過加密演算法加密,存進資料庫中(表三),

表一

表二

表三
至于MD5加密演算法的底層原理,參考這篇博客:https://blog.csdn.net/sinat_27933301/article/details/79538169
二、代碼實作
Java有挺多關于MD5加密的方法,這里就用Spring中的 DigestUtils.md5DigestAsHex() 實作,
public class MD5Util { public String passwordEncryptor(String password){ return DigestUtils.md5DigestAsHex(password.getBytes()); } }
從前端獲取用戶輸入的用戶名,查找資料庫中的 salt,并混在用戶輸入的密碼中,這里我直接把 salt 加在后面
// 省略很多代碼,包括查找資料庫的代碼 String username = request.getParameter("username"); String password = request.getParameter("password"); String salt = impUserService.findSalt(username); String mdPassword = md5Util.passwordEncryptor(password + salt); User user = impUserService.find(username, mdPassword);
三、其他的問題
用戶登錄時的密碼需要在前端用js加密后再提交嗎?
我個人想法,應該是不用的,可能覺得前端明文傳輸給后端的話,程序中如果能被人截取到,那不是挺危險的,但是既然能獲取,那前端的加密演算法也暴露了,所以感覺像是做無用功,當然這只是我個人想法,有知道的或者有其他想法的大佬跟我說一下哈哈哈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53210.html
標籤:其他
上一篇:SQL注入:Cookie注入
下一篇:網路安全的進步之路
