天天看點

md5 加鹽原理和常用的加鹽方法

現在的MD5密碼資料庫的資料量已經非常龐大了,大部分常用密碼都可以通過MD5摘要反向查詢到密碼明文。為了防止内部人員(能夠接觸到資料庫或者資料庫備份檔案的人員)和外部入侵者通過MD5反查密碼明文,更好地保護使用者的密碼和個人帳戶安全(一個使用者可能會在多個系統中使用同樣的密碼,是以涉及到使用者在其他網站和系統中的資料安全),需要對MD5摘要結果摻入其他資訊,稱之為加鹽。

加鹽的算法有很多,考慮到加鹽的目的(防止擁有系統底層權限的人員),想做到絕對不可反查是很困難的,需要有其他軟體或者硬體的協助,在很多場景下的實用性比較差。如果隻是想增加反查的難度,倒是有很多方法可以選擇,一種便利的方法是md5(Password+UserName),即将使用者名和密碼字元串相加再MD5,這樣的MD5摘要基本上不可反查。但有時候使用者名可能會發生變化,發生變化後密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。

是以我們做了一個非常簡單的算法,每次儲存密碼到資料庫時,都生成一個随機16位數字,将這16位數字和密碼相加再求MD5摘要,然後在摘要中再将這16位數字按規則摻入形成一個48位的字元串。在驗證密碼時再從48位字元串中按規則提取16位數字,和使用者輸入的密碼相加再MD5。按照這種方法形成的結果肯定是不可直接反查的,且同一個密碼每次儲存時形成的摘要也都是不同的。