加鹽加密算法

    • MD5加密
    • 加鹽加密
    • 項目密碼升級

MD5加密

MD5一系列公式進行復雜數學運算;特點:(用途校驗和、計算hash值方式、加密)
1:定長;無論原始數據多長;算出的結果都是4或者8字節的版本。
2:沖突概率很小;就算你只改動一個地方;但是計算的結果相比之下是非常大
3:不可逆;正著計算很容易;逆著計算理論不可能實現;計算量很大;當前的條件是不可能實現

彩虹表:網上解密的工具只能把一些常見的字符串MD5值保存好;然后進行查表的值;并不是真實的計算出結果。
在這里插入圖片描述
java中如何將一段這種字符串的password進行MD5加密呢:
DigestUtils.md5DigestAsHex是Apache Commons Codec庫中的一個工具方法,用于計算傳入參數的MD5哈希值,并返回一個16進制字符串表示的結果。
傳入的參數需要是一個字節數(byte[])或字符串(String)。如果參數是字符串,則會自動將其轉換為對應的字節數組。

String password="12345678";
String md5password=DigestUtils.md5DigestAsHex(password.getBytes());
System.out.println(md5password);

同一個字符串md5的值一個固定值;如果人家獲取到你的md5這個值;破解密碼隨隨便便;直接遍歷彩虹表窮舉;相當于加一把沒帶鑰匙的鎖

加鹽加密

加密:密碼+隨機鹽值 進行md5加密
解密:我們也沒法解;因為是不可逆的;我們記住加密規則;再走一遍流程;對比用戶登錄的密碼和數據庫的是否一樣

鹽值:
我們得知道鹽值是什么;才能重新再走一遍的規則;那就涉及鹽值怎么來的;怎么儲存

獲取鹽值:

String salt=UUID.randomUUID().toString().replace("-","");
//UUID一般被表示為32個字符的十六進制數,最常用的格式是8-4-4-4-12的五段分割
//例如:c4a760a8-dbcf-11e9-8f92-2b1af3aec0a6;我們把橫杠去掉;替換成空字符串

你的鹽值要每次不一樣(每個用戶的是不一樣);那么就使用uuid;時間戳有可能重復。多個人的隨機鹽值是一樣;會造成破解多個和破解一個是一樣難度。

儲存鹽值:
方式1:鹽值和密碼單獨存儲兩個字段(如果對方破解你數據庫內容;那就很危險;相當于我告訴黑客;鹽值是……;你自己去用彩虹表加密遍歷一下和我的這個密碼對比) 不現實
方式2:鹽值和密碼整合一起;存在一個字段。(用一個分隔符;分割哪里是鹽值;哪里是MD5后的密碼;給黑客破解增加難度;它還得猜你哪個是分隔符;那邊是鹽值;哪邊是密碼)
使用一個規則約定這里鹽值和密碼:分隔符(缺點;傳遞的正文不能有這個分隔符)?或者是按位數;前32位存鹽值、后32位存密碼。

為什么加鹽值后破解成本大大提升:
假設我的鹽值是1-n(實際更復雜);要暴力破解對應n個彩虹表;得拿鹽值去和彩虹表的每一個進行MD5再和我們的密碼對比。而且這樣子破解的只是一個用戶。

代碼實現:

package com.example.demo.service;import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;import java.util.UUID;public class salt_encrypt {//加密過程;相當于注冊的時候要用于存進去數據庫的password字段public static String encrypt(String reg_password){String salt= UUID.randomUUID().toString().replace("-","");String md5password= DigestUtils.md5DigestAsHex((reg_password+salt).getBytes());String dbpassword=salt+"$"+md5password;return dbpassword;}public static boolean decrypt(String login_password,String dbpassword){boolean result=false;//判空操作if(StringUtils.hasLength(login_password)&&StringUtils.hasLength(dbpassword)){//取出鹽值String [] dbpassword1=dbpassword.split("\\$");
//                因為 "$" 在正則表達式中具有特殊含義。在正則表達式中,"$" 表示行結束的位置,
//                如果不進行轉義,正則表達式會將它解釋為行結束符意思,而不是普通的字符 "$"。String salt=dbpassword1[0];String dbpassword2=dbpassword1[1];//獲取我們直接用數據庫的鹽值+分隔符+md5密碼是否包含這個要驗證的密碼md5值login_password=DigestUtils.md5DigestAsHex((login_password+salt).getBytes());if(dbpassword1.equals(login_password)){result=true;}}return result;}}

項目密碼升級

代碼改造:
UserController的注冊;修改前在這里插入圖片描述
修改后:存的密碼變成加鹽md5后的
在這里插入圖片描述
UserController的登錄:修改前
在這里插入圖片描述
修改后:
在這里插入圖片描述

檢查數據庫password的字段是否是65位的;因為我們之前可能沒使用加鹽加密就沒考慮那么多;如果我們之前隨時password varchar(32)那么可以通過alter table userinfo modify column password varchar(65);進行修改

驗證:
注冊成功;且儲存的密碼樣式是我們需要的。登錄成功;說明驗證是通過了。
在這里插入圖片描述
Spring 框架提供了有加鹽加密的方式,最常用的是Spring Security :
1:使用先添加Security框架
2:內置一個登錄頁面;我們得把這個關閉掉(因為我們自己有登錄頁面;不需要用它的)
在這里插入圖片描述

它會在控制臺提供一個密碼給你
在這里插入圖片描述
如何關閉:
在啟動類添加這個(自動注入;關閉這個類自動的加載;但是APi還是能用的;因為我們把這個依賴加入項目了;;spring是真的默認是自動加載的)
在這里插入圖片描述
使用:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java多線程實戰

Java多線程實戰 java多線程(超詳細) java自定義線程池總結 Java創建線程方式 方法1,繼承Thread類 方法2,實現Runable接口 方法2-2,匿名內部類形式lambda表達式 方法3,實現Callable接口,允許…

【深入理解Linux內核鎖】三、原子操作

我的圈子: 高級工程師聚集地 我是董哥,高級嵌入式軟件開發工程師,從事嵌入式Linux驅動開發和系統開發,曾就職于世界500強企業! 創作理念:專注分享高質量嵌入式文章,讓大家讀有所得! 文章目錄 1、原子操作思想2、整型變量原子操作2.1 API接口2.2 API實現2.2.1 原子變量結…

Shell 函數

Shell 函數 linux shell 可以用戶定義函數,然后在shell腳本中可以隨便調用。 shell中函數的定義格式如下: [ function ] funname [()] { action; [return int;] } 說明: 1、可以帶function fun() 定義,也可以直接fun…

log4j:WARN No appenders could be found for logger問題

本文將idea場景下的使用。 IDEA中,將配置文件命名為log4j.properties(該命名才會被自動加載), 并放到某個目錄下(通常放到resources目錄),并在resources上右鍵,找到Mark Directory a…

微信程序 自定義遮罩層遮不住底部tabbar解決

一、先上效果 二 方法 1、自定義底部tabbar 實現: https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 官網去抄 簡單寫下:在代碼根目錄下添加入口文件 除了js 文件的list 需要調整 其他原封不動 代碼&#xf…

Hadoop數據遷移distcp

Hadoop數據遷移distcp 準備工作 確認源集群(a),目標集群(b)確認a集群的主節點和b集群的主節點確認兩個集群的網絡相通確認遷移模式(全量遷移還是增量遷移),這里選擇全量遷移 遷移文件 遷移t…

【路由協議】使用按需路由協議和數據包注入的即時網絡模擬傳遞率(PDR)、總消耗能量和節點消耗能量以及延遲研究(Matlab代碼實現)

💥💥💞💞歡迎來到本博客????💥💥 🏆博主優勢:🌞🌞🌞博客內容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ??座右銘&a…

斯坦福「小鎮」開源AI智能體;小米應用商店將要求AI應用符合資質標準

🦉 AI新聞 🚀 斯坦福「小鎮」開源AI智能體 摘要:斯坦福研究人員開源了一個類似《西部世界》的數字化「小鎮」,里面有25個AI智能體可以生活、工作、社交。這項研究被視為AGI的重要開端,可能會改變游戲、企業應用領域。網友期待這項技術改善游戲NPC的交互…

PyMuPDF`庫實現PDF旋轉功能

本文介紹了一個簡單的Python應用程序,用于將PDF文件轉換為旋轉90度的PDF文件。主要用于csdn網站中導出的博客pdf是橫向的,看起來不是很方便,才想到用python編制一個將pdf從橫向轉為縱向的功能。 功能 該PDF轉換工具具有以下功能&#xff1a…

信息安全:防火墻技術原理與應用.

信息安全:防火墻技術原理與應用. 防火墻是網絡安全區域邊界保護的重要技術。為了應對網絡威脅,聯網的機構或公司將自己的網絡與公共的不可信任的網絡進行隔離,其方法是根據網絡的安全信任程度和需要保護的對象,人為地劃分若干安全…

C#工程建立后修改工程文件名與命名空間

使用之前的項目做二次開發,項目快結束的時候,需要把主項目的名稱修改成我們想要的。 之前從來沒有這么干過,記錄一下。 步驟如下: 1:打開vs2010項目解決方案,重命名,如下圖所示: …

SDP協議是什么,詳解SDP協議

一、SDP協議簡介 SDP(Session Description Protocol)是一種會話描述協議,用于描述多媒體會話的參數。它是一種文本協議,通常用于VoIP(Voice over Internet Protocol)和視頻會議等應用中。SDP協議定義了一種…

Vue項目(購物車)

目錄 購物車效果展示: 購物車代碼: 購物車效果展示: 此項目添加、修改、刪除數據的地方都寫了瀏覽器都會把它存儲起來 下次運行項目時會把瀏覽器數據拿出來并在頁面展示 Video_20230816145047 購物車代碼: 復制完代碼&#xff0…

leetcode每日一題_2682.找出轉圈游戲輸家

2682.找出轉圈游戲輸家 題目: n 個朋友在玩游戲。這些朋友坐成一個圈&#xff0c;按 順時針方向 從 1 到 n 編號。從第 i 個朋友的位置開始順時針移動 1 步會到達第 (i 1) 個朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而從第 n 個朋友的位置開始順時針移…

設計模式之原型模式Prototype的C++實現

1、原型模式提出 在軟件功能設計中&#xff0c;經常面臨著“某些結構復雜的對象”的創建工作&#xff0c;且創建的對象想擁有其他對象在某一刻的狀態&#xff0c;則可以使用原型模型。原型模型是通過拷貝構造函數來創建對象&#xff0c;并且該對象擁有其他對象在某一刻的狀態。…

Docker基礎入門:鏡像、容器導入導出與私有倉庫搭建

Docker基礎入門&#xff1a;鏡像導入導出與私有倉庫搭建 一、 Docker鏡像、容器的導入和導出1.1、Docker鏡像的導出1.2、Docker鏡像的載入1.3、Docker容器的導出1.4、Docker容器的導入 二、 鏡像和容器導出和導入的區別:三、commit操作_本地鏡像發布到阿里云3.1、commit操作有關…

ppt中線材相交接的地方,如何繪畫

ppt中線材相交接的地方&#xff1a; 在ppt中繪畫線材相互交接的地方&#xff1a; 1.1繪圖工具中的“弧形” 1.2小技巧 “弧形”工具點一下&#xff0c;在ppt中如下 1.3拖動活動點進行調整圖形 1.4繪畫圓弧 1.5調整“圓弧”的大小&#xff0c;鼠標放在“黃色點”位置&#xf…

【JVM】垃圾回收算法

目錄 一、判斷對象已“死” 1.1、引用計數算法 1.2、可達性分析算法 1.3、引用的概念 二、垃圾收集算法理論 2.1、分代收集理論 三、垃圾收集算法 3.1、標記--清除算法 3.2、標記--復制算法 3.3、標記--整理算法 一、判斷對象已“死” 在堆里面存放著Java世界中幾乎所…

【數據結構】二叉搜索樹

&#x1f680; 作者簡介&#xff1a;一名在后端領域學習&#xff0c;并渴望能夠學有所成的追夢人。 &#x1f40c; 個人主頁&#xff1a;蝸牛牛啊 &#x1f525; 系列專欄&#xff1a;&#x1f6f9;數據結構、&#x1f6f4;C &#x1f4d5; 學習格言&#xff1a;博觀而約取&…