MD5 加鹽加密


一、概述

  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加密后再提交嗎?

  我個人想法,應該是不用的。可能覺得前端明文傳輸給后端的話,過程中如果能被人截取到,那不是挺危險的。但是既然能獲取,那前端的加密算法也暴露了,所以感覺像是做無用功。當然這只是我個人想法,有知道的或者有其他想法的大佬跟我說一下哈哈哈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM