MD5 加鹽加密

1、概述

  MD5(Message Digest  Algorithm 5),是一種散列算法,是不可逆的,即經過md5加密以後沒辦法獲得原文,沒有解密算法。前端

  在通常的項目中都會有登陸註冊功能,最簡單的,登陸註冊過程徹底沒有加密,存儲在數據庫的密碼也是明文,安全性是不好的,萬一數據泄露就很差了(表一)。因此,經過MD5將密碼加密後保存在數據庫中(表二),在登陸的過程當中後端將從前端獲取到的密碼加密,對照數據庫中已經加密的密碼。算法

  可是通常加密算法固定,很容易破解,安全係數低,就我所知,有不少網站能夠直接破解密文。爲了提升安全性,能夠採起加鹽的方式。生成一組隨機串,保存在數據庫中,而後混雜在原來的密碼中,再經過加密算法加密,存進數據庫中(表三)。數據庫

                            

 

                       表一後端

 

        

 

 

                     表二安全

 

        

 

                     表三網站

 

   至於MD5加密算法的底層原理,參考這篇博客:https://blog.csdn.net/sinat_27933301/article/details/79538169加密

2、代碼實現

  Java有挺多關於MD5加密的方法,這裏就用Spring中的 DigestUtils.md5DigestAsHex() 實現。spa

public class MD5Util {
    public String passwordEncryptor(String password){
        return DigestUtils.md5DigestAsHex(password.getBytes());
    }
}

  從前端獲取用戶輸入的用戶名,查找數據庫中的 salt,並混在用戶輸入的密碼中,這裏我直接把 salt 加在後面.net

// 省略不少代碼,包括查找數據庫的代碼
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);

3、其餘的問題

  用戶登陸時的密碼須要在前端用js加密後再提交嗎?code

  我我的想法,應該是不用的。可能以爲前端明文傳輸給後端的話,過程當中若是能被人截取到,那不是挺危險的。可是既然能獲取,那前端的加密算法也暴露了,因此感受像是作無用功。固然這只是我我的想法,有知道的或者有其餘想法的大佬跟我說一下哈哈哈。

相關文章
相關標籤/搜索