什么是“加鹽”?為什么加密也要“加鹽”?
你聽(tīng)說(shuō)過(guò)“加鹽”嗎?這可不是指的炒菜,而是一種加密手段,那么什么是加鹽?為什么要加鹽呢?今天我們就來(lái)了解一下加鹽加密吧。
什么是加鹽?
在密碼學(xué)中,通過(guò)在密碼任意固定位置插入特定字符串,讓散列后的結(jié)果和使用原始密碼的散列結(jié)果不相符,這樣一個(gè)過(guò)程我們稱(chēng)之為“加鹽”。
“鹽值”是一組隨機(jī)的字符串,被稱(chēng)為Salt,由系統(tǒng)隨機(jī)生成。Salt可以插在最前面、最后面,也可以插在中間,可分開(kāi)插入也可倒序。

為什么要加鹽?
在實(shí)際應(yīng)用中,出于安全和數(shù)據(jù)保密的考慮,常常需要使用到加密算法,一些網(wǎng)站的數(shù)據(jù)庫(kù)管理著用戶(hù)的ID及密碼。密碼常以MD5等加密后的形式存在,但也并非萬(wàn)無(wú)一失。于是就出現(xiàn)了加鹽加密的方式,這種加入鹽值的方式可以有效防止黑客暴力破解用戶(hù)ID和密碼。

第一代密碼:數(shù)據(jù)庫(kù)明文存儲(chǔ),一旦數(shù)據(jù)庫(kù)泄露,用戶(hù)數(shù)據(jù)全部泄漏。
第二代密碼:數(shù)據(jù)庫(kù)加密存儲(chǔ),典型加密算法有 MD5 和 SHA1 ,數(shù)據(jù)庫(kù)存儲(chǔ)的密碼為加密后的密文。理論上來(lái)說(shuō)不能被解密,即使數(shù)據(jù)庫(kù)丟失,但由于存儲(chǔ)為密文,所以無(wú)法判斷用戶(hù)原始密碼。
第三代密碼:數(shù)據(jù)庫(kù)存儲(chǔ)MD5加密后的密碼+Salt,進(jìn)行加鹽處理。當(dāng)密碼設(shè)置過(guò)于簡(jiǎn)單,第二代密碼加密方式就不那么有效了,于是為數(shù)據(jù)庫(kù)加入一個(gè)Salt鹽值字段(Salt可以是任意字母、數(shù)字、或字母數(shù)字的組合,必須是隨機(jī)產(chǎn)生的),每個(gè)用戶(hù)Salt值均不相同。
加鹽流程
用戶(hù)注冊(cè)時(shí):
- 用戶(hù)在網(wǎng)站注冊(cè)時(shí)提供ID與密碼;
- 系統(tǒng)為用戶(hù)分配鹽值;
- 鹽值插入密碼后進(jìn)行HASH;
- 將ID,HASH值與鹽值一起存入數(shù)據(jù)庫(kù)。

身份驗(yàn)證時(shí):
- 用戶(hù)提供ID與密碼;
- 系統(tǒng)在數(shù)據(jù)庫(kù)中通過(guò)用戶(hù)提供的ID查找HASH值與鹽值;
- 將鹽值插入用戶(hù)提供的密碼后進(jìn)行HASH;
- 將HASH值與數(shù)據(jù)庫(kù)中的HASH值比較,相等則驗(yàn)證成功,反之則驗(yàn)證失敗。
免責(zé)聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪稿。



