首頁技術(shù)文章正文

密碼加密加鹽處理介紹【Java培訓(xùn)】

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

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

·數(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ù)庫匹配,實(shí)現(xiàn)登錄認(rèn)證功能,但存在的安全隱患問題太多:

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

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

2、針對以上兩個問題進(jìn)行分析和解決

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

加密加鹽處理02


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

加密加鹽處理03


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

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

加密加鹽處理04

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

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

3、接下來我們介紹一下對其進(jìn)行加鹽處理

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

加密加鹽處理05


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

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

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

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

加密加鹽處理06

·BCrypt密碼圖解

加密加鹽處理07

·Bcrypt有四個變量:

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

myPassword: 明文密碼字符串。

salt: 鹽,一個128bits隨機(jī)字符串,22字符

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

·如何校驗(yàn)正確性

在校驗(yàn)時,從密文中取出鹽salt,salt跟password進(jìn)行hash,得到的結(jié)果跟保存在DB中的hash進(jìn)行比對。

總結(jié):

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

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

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


猜你喜歡:

雙向鏈表是什么?

如何理解面向?qū)ο缶幊讨械念惡蛯ο?

Java高級軟件工程師培訓(xùn)課程

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