我們知道,如果直接對密碼進行雜湊,那麼黑客(統稱那些有能力竊取使用者資料並企圖得到使用者密碼的人)可以對乙個已知密碼進行雜湊,然後通過對比雜湊值得到某使用者的密碼。換句話說,雖然黑客不能取得某特定使用者的密碼,但他可以知道使用特定密碼的使用者有哪些。
加salt可以一定程度上解決這一問題。所謂加salt,就是加點「佐料」。其基本想法是這樣的——當使用者首次提供密碼時(通常是註冊時),由系統自動往這個密碼裡撒一些「佐料」,然後再雜湊。而當使用者登入時,系統為使用者提供的**撒上同樣的「佐料」,然後雜湊,再比較雜湊值,已確定密碼是否正確。
這裡的「佐料」被稱作「salt值」,這個值是由系統隨機生成的,並且只有系統知道。這樣,即便兩個使用者使用了同乙個密碼,由於系統為它們生成的salt值不同,他們的雜湊值也是不同的。即便黑客可以通過自己的密碼和自己生成的雜湊值來找具有特定密碼的使用者,但這個機率太小了(密碼和salt值都得和黑客使用的一樣才行)。
下面詳細介紹一下加salt雜湊的過程。介紹之前先強調一點,前面說過,驗證密碼時要使用和最初雜湊密碼時使用「相同的」佐料。所以salt值是要存放在資料庫裡的。
使用者註冊時:
1)使用者提供密碼(以及其他使用者資訊);
2)系統為使用者生成salt值;
3)系統將salt值和使用者密碼連線到一起;
4)對連線後的值進行雜湊,得到hash值;
5)將hash值和salt值分別放到資料庫中。
登入時:
1)使用者提供使用者名稱和密碼;
2)系統通過使用者名稱找到與之對應的hash值和salt值;
3)系統將salt值和使用者提供的密碼連線到一起;
4)對連線後的值進行雜湊,得到hash'(注意有個「撇」);
5)比較hash和hash'是否相等,相等則表示密碼正確,否則表示密碼錯誤。
hash加密的壞處是會被反查出來。
密碼儲存形式有三種:明文、加密、雜湊值。
。所以我們一般用雜湊值儲存密碼,常用的計算雜湊值的方法是 md5 和 sha-1,本文以 md5 為例。
。增加簡單密碼的安全性
假設使用者的密碼是 1,那麼 md5 值就是:c4ca4238a0b923820dcc509a6f75849b。
這個在網上很容易被反查出來,比如這兩個**:
的就是 md5("xids#3" + "1"),隨機鹽被明文儲存在另乙個欄位時,到時候判斷密碼時再把密碼和隨機鹽混合起來計算。而要反查 md5("xids#3" + "1") 就不是件容易的事了。
讓相同的密碼具有不同的結果
由於有隨機鹽參與了 md5 運算,所以相同的密碼,由於隨機鹽不同,雜湊值就不同了。
隨機salt二次加密
我們知道,如果直接對密碼進行雜湊,那麼黑客 統稱那些有能力竊取使用者資料並企圖得到使用者密碼的人 可以對乙個已知密碼進行雜湊,然後通過對比雜湊值得到某使用者的密碼。換句話說,雖然黑客不能取得某特定使用者的密碼,但他可以知道使用特定密碼的使用者有哪些。加salt可以一定程度上解決這一問題。所謂加sal...
Axios二次封裝及應用
一 安裝axios npm i axios d二 在src目錄下建立request資料夾,並在資料夾建立http.js和api.js兩個檔案 環境切換 if process.env.node env development else if process.env.node env debug els...
二次注入原理及防禦
二次注入需要具備的兩個條件 1 使用者向資料庫插入惡意語句 即使後端 對語句進行了轉義,如mysql escape string mysql real escape string轉義 2 資料庫對自己儲存的資料非常放心,直接取出惡意資料給使用者 1 在sqli libs的第24關,其頁面如下所示 3...