【web安全】-- springboot實現兩次MD5加密


一、為什么要做兩次MD5

客戶端MD5:HTTP在網絡上是使用明文傳輸,用戶輸入的明文密碼直接在網絡上傳輸太危險。所以,在客戶端需要進行一次MD5(明文+固定鹽)。

服務端:防止數據庫被入侵,被人通過彩虹表反查出密碼。所以服務端接受到后,也不是直接寫入到數據庫,而是生成一個隨機鹽,再進行一次MD5后存入數據庫。

二、具體步驟

1、引入依賴

 <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
 </dependency>
 <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
 </dependency>

2、MD5Util工具類

public class MD5Util {
    
    /**
     * 加密方法
     * @param src
     * @return
     */
    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }
    
    //固定鹽
    private static final String salt = "1a2b3c4d";
    
    /**
     * 將用戶輸入的明文密碼與固定鹽進行拼裝后再進行MD5加密
     * @param inputPass
     * @return
     */
    public static String inputPassToFormPass(String inputPass) {
        String str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
        System.out.println(str);
        return md5(str);
    }
    
    /**
     * 將form表單中的密碼轉換成數據庫中存儲的密碼
     * @param formPass
     * @param salt 隨機鹽
     * @return
     */
    public static String formPassToDBPass(String formPass, String salt) {
        String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }
    
    public static String inputPassToDbPass(String inputPass, String saltDB) {
        String formPass = inputPassToFormPass(inputPass);
        String dbPass = formPassToDBPass(formPass, saltDB);
        return dbPass;
    }
    
}

3、前台進行加密

//獲取密碼
var inputPass = $("#password").val();
//獲取固定鹽
var salt ="1a2b3c4d"; 
//進行拼裝
var str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
//加密
var password = md5(str);

4、服務端

 //獲取數據庫密碼
  String dbPass = user.getPassword();
  //獲取數據庫卡存儲鹽
  String saltDB = user.getSalt();
  //將前台加密后的密碼轉換成數據庫存儲的二次加密密碼
  String calcPass = MD5Util.formPassToDBPass(formPass, saltDB);
  //判斷是否相等
   if(!calcPass.equals(dbPass)) {
     //我配置了全局異常處理器,會捕捉這里的異常
     throw new GlobalException(CodeMsg.PASSWORD_ERROR);
    }


免責聲明!

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



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