首頁技術文章正文

密碼加密加鹽處理介紹【Java培訓】

更新時間:2020-10-15 來源:黑馬程序員 瀏覽量:

1、首先介紹一下常規(guī)的登錄認證(非安全性)

·數(shù)據(jù)庫表如下所示:

密碼的加密加鹽處理01

<form action="index.jsp" method="post">
    賬 號:<input type="text" name="username"/><br/>
    密 碼:<input type="password" name="password"><br/><br/>
    <input type="submit" value="提交"><br/>
</form>



·用戶通過表單提交用戶名,密碼兩個字段查詢數(shù)據(jù)庫匹配,實現(xiàn)登錄認證功能,但存在的安全隱患問題太多:

(1)數(shù)據(jù)庫密碼以明文的形式進行存儲。

(2)數(shù)據(jù)傳輸?shù)倪^程中未對數(shù)據(jù)進行加密處理。

2、針對以上兩個問題進行分析和解決

·安全加密:首先對數(shù)據(jù)庫表的password字段進行摘要md5處理,sql語句如下:

加密加鹽處理02


·md5加密后的數(shù)據(jù)

加密加鹽處理03


·數(shù)據(jù)庫密碼加密后,校驗的邏輯就發(fā)生了些變化,需要對提交的密碼進行加密之后再做對比,但是這樣子還是不安全。

(1)通過以上步驟,我們只對數(shù)據(jù)庫的password明文字段進行了簡單的MD5加密,進入http://www.cmd5.com/ 輸入加密后的密文進行解密后可以得到明文密碼

加密加鹽處理04

(2)容易根據(jù)密文位數(shù)推測算法,從而使用工具破解。

(3)真實密碼相同,加密過的密碼也相同。

3、接下來我們介紹一下對其進行加鹽處理

在表中添加一列salt字段(鹽),內容隨意輸入23sd2,然后和原來的明文密碼123456結合,再進行md5加密。

加密加鹽處理05


說明:所謂的salt字段就是一個隨機的字段,具體隨機算法就不討論了,每當用戶注冊賬戶時,后臺就給它隨機生成一個不同的字段,然后根據(jù)password和salt字段結合進行摘要處理,存在數(shù)據(jù)庫表中的password字段,這樣一來,原來明文都是123456生成的密文就不一樣了。

以上的步驟我們只是對數(shù)據(jù)庫進行了加密,為了防止用戶輸入密碼在傳輸?shù)倪^程中被抓包工具獲取,我們還要在密碼傳輸?shù)倪^程中進行加密,這樣可以使得獲取到的也是密文。

4、最后介紹下BCrypt加鹽加密

·經(jīng)過BCryptPasswordEncoder加密后的內容,不需要專門的salt字段存儲鹽,而是在密文中。

加密加鹽處理06

·BCrypt密碼圖解

加密加鹽處理07

·Bcrypt有四個變量:

saltRounds: 正數(shù),代表hash雜湊次數(shù),數(shù)值越高越安全,默認10次。

myPassword: 明文密碼字符串。

salt: 鹽,一個128bits隨機字符串,22字符

myHash: 經(jīng)過明文密碼password和鹽salt進行hash

·如何校驗正確性

在校驗時,從密文中取出鹽salt,salt跟password進行hash,得到的結果跟保存在DB中的hash進行比對。

總結:

·對于用戶的密碼保護,數(shù)據(jù)庫對敏感的字符內容一定要進行加密之后存儲。

·如果只是單純的對密碼進行加密,密碼字符一樣會導致加密后的內容也一樣,會出現(xiàn)破解一個就可以破解一片的情況。

·通過對密碼加鹽(混入隨機字符拼接在密碼明文中)之后加密,可以增加系統(tǒng)復雜度,得到更強更安全的密文摘要值。


猜你喜歡:

雙向鏈表是什么?

如何理解面向對象編程中的類和對象?

Java高級軟件工程師培訓課程

分享到:
在線咨詢 我要報名
和我們在線交談!