基於雜湊演算法的web賬戶口令儲存方法

2022-08-29 01:00:17 字數 1064 閱讀 7438

web賬戶的口令不能直接明文儲存,這樣太不安全了,需要加密儲存。

儲存策略—— 基於安全雜湊演算法加密儲存使用者的口令

估計基於安全雜湊演算法的儲存方式應該已經廣泛使用了,不過奇怪的是網上難以找到相關應用的詳細資料。雜湊演算法可用於保障資訊的完整性、抗抵賴性, 屬於單向演算法,即便雜湊的結果被截獲,對方也是無法還原出明文的。如果在雜湊的過程中加入鹽值,那就更好了,可以起到混淆的作用。鹽值這個概念找不到定義,大概是指使用者間相互不同的資訊,常見的使用者名稱、使用者郵箱、賬號註冊時間等。

類似地,選擇基於雜湊的訊息認證碼(hmac)也可用於身份認證,安全性更強,如果各位對單純的hash不放心,可以使用hmac。

也有資料提到通過非對稱加密演算法加密後儲存,比如rsa,個人覺得這種方法的安全性不如雜湊演算法,使用起來也麻煩,需考慮系統後台的金鑰管理,而一旦金鑰洩露,所以資訊也就都白加密了。

2. 演算法的選擇

雜湊演算法有很多,常見的有md5和sha系列。現在有個叫彩虹表的東西,窮舉某個雜湊值所對應的明文,導致了md5和sha-1已經不再安全。而sha-256或sha-512目前還是比較安全的,而且計算消耗的資源不會比md5或sha-1差太多。從**實現的角度考慮,各演算法的引數都一樣,返回值型別也一樣,只是函式名和返回值長度變了,所以如果已使用了md5或sha-1,可很方便地切換到更安全的演算法上。

3. 新增鹽值

以鹽值為使用者名稱,演算法為sha-256為例,使用者最終儲存在後台的口令就可以為sha256(" 使用者名稱+口令 " )。而登陸的時候,有兩種驗證策略:

可以看到,服務端是不知道使用者的口令明文是什麼,所以即便資料庫攻破,也不會洩露使用者的口令。

再說說新增鹽值的好處。大家都知道,最常見的口令是123456,假設有100個使用者都這麼設定了,那麼如果不加鹽值,這100個使用者後台加密儲存的口令就一摸一樣了,這就是乙個安全隱患。加了鹽值還可以增加彩虹表碰撞的難度,就算使用者使用了最簡單的口令,加了鹽值後也還是難以破解的。

鹽值最好選擇使用者註冊後,就不會再改變的資訊,或是由這些資訊計算後的另乙個值。比如,如果鹽值設定成了使用者郵箱,那就要確保這個郵箱不能修改,否則一旦郵箱改了,hash("新郵箱+口令")≠ hash("舊郵箱+口令") ,從而使用者改了郵箱就不能再登入了。

基於佇列和雜湊的種子填充演算法

繼 之後,我又對種子填充演算法進行了改進,主要利用了雜湊的思想,以空間換時間,把這個演算法的速度再次優化了。這次的優化效果非常好,填充大面積區域稍有卡頓。下面是效果圖 核心 如下 雖然看起來很多,但是相同的內容很多,邏輯清晰。void fillarea int x,int y 雜湊表,雜湊函式 h ...

ubuntu的賬戶密碼演算法

os ubuntu 11.04 compiler gcc 4.5.2 在 etc shadow裡,存放著系統賬戶密碼的相關資訊,檔案格式如下 6 ehgch6yt e.xzfji5ny6kt86cmjk.1e6mbwuw2drlvbmyarns7 8hteu2cmzsrmqaghpxicol1cqu...

雜湊演算法的原理

用乙個比喻來說明什麼是雜湊演算法 假設有n只小豬,它們的體重各不相同,一開始我們把它們放在乙個豬圈裡面。如果想尋找其中某只小豬,只能乙個乙個的找,很耗時間。現在我們用雜湊演算法的思想來管理小豬,我們按照小豬的體重來分豬圈 體重當然不能精確到毫克級別,那樣就要分n個豬圈,費用太高。我們考慮到公斤級別級...