一,什么是散列演算法
為了保證密碼的安全,我們經常會用到散列演算法對密碼進行加密,
散列演算法的3個特點:
1. 同樣的字串會生成相同的散列值(散列值就是一堆亂七八糟的字串),
2. 不同的字串生成的散列值很有可能不一樣,只要對字串做了一點微小改動,生成的散列值會有天翻地覆的變化,
3. 不能由散列值計算出原始的字串,
二,如何安全的保存用戶密碼
1. 將用戶密碼的散列值保存到資料庫,
通常,我們會將用戶名和密碼保存到資料庫的用戶表中,但為了防止資料庫被黑或者密碼被網站內部人員看到,我們不能直接將密碼明文保存到資料庫,
在用戶注冊的時候,將用戶密碼的散列值保存到資料庫,用戶登錄的時候,將用戶輸入的密碼計算出散列值,將計算出的散列值和資料庫中保存的散列值做比較,相等就表示登錄成功,但這樣做,我們的密碼就安全了嗎?No! 請接著看下面,
2. 一些人可能擁有常用的簡單密碼和對應散列值的資料庫(如下圖),所以,只要有人拿到你密碼的散列值就可以得到你的原始密碼,為了解決這個問題,我們可以引入加鹽演算法,
在用戶注冊的時候,隨機的生成一段復雜字串作為鹽(如d3!Ab_&),并把鹽保存到資料庫中,同時在用戶注冊的密碼后拼接上鹽再計算生成散列值,即散列值 = MD5(注冊Password + Salt),用戶登陸的時候,把MD5(登錄Password + Salt)生成的值和資料庫已有的散列值做比較,相等就表示登錄成功,這樣的話,即使有人拿到了你密碼的散列值,也無法推算出你的原始密碼,這也是QQ只有重置密碼的功能而沒有發送原始密碼功能的原因,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/541392.html
標籤:訊息安全
上一篇:day02-Promise
下一篇:如何安全的保存用戶密碼
