教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

5分鐘了解密碼的加密加鹽處理

更新時(shí)間:2020年10月15日15時(shí)39分 來(lái)源:傳智播客 瀏覽次數(shù):

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

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

密碼的加密加鹽處理01


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

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

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

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

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

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

加密加鹽處理02


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

加密加鹽處理03


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

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

加密加鹽處理04

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

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

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

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

加密加鹽處理05


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

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

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

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

加密加鹽處理06

·BCrypt密碼圖解

加密加鹽處理07

·Bcrypt有四個(gè)變量:

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

myPassword: 明文密碼字符串。

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

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

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

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

總結(jié):

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

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

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


猜你喜歡:

什么是filter?filter是用來(lái)做什么的?

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

單例模式教程:?jiǎn)卫J降膸追N實(shí)現(xiàn)方式

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

0 分享到:
和我們?cè)诰€交談!