md5 加鹽原理和常用的加鹽方法
阿新 • • 發佈:2019-02-17
現在的MD5密碼資料庫的資料量已經非常龐大了,大部分常用密碼都可以通過MD5摘要反向查詢到密碼明文。為了防止內部人員(能夠接觸到資料庫或者資料庫備份檔案的人員)和外部入侵者通過MD5反查密碼明文,更好地保護使用者的密碼和個人帳戶安全(一個使用者可能會在多個系統中使用同樣的密碼,因此涉及到使用者在其他網站和系統中的資料安全),需要對MD5摘要結果摻入其他資訊,稱之為加鹽。
加鹽的演算法有很多,考慮到加鹽的目的(防止擁有系統底層許可權的人員),想做到絕對不可反查是很困難的,需要有其他軟體或者硬體的協助,在很多場景下的實用性比較差。如果只是想增加反查的難度,倒是有很多方法可以選擇,一種便利的方法是md5(Password+UserName),即將使用者名稱和密碼字串相加再MD5,這樣的MD5摘要基本上不可反查。但有時候使用者名稱可能會發生變化,發生變化後密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。
因此我們做了一個非常簡單的演算法,每次儲存密碼到資料庫時,都生成一個隨機16位數字,將這16位數字和密碼相加再求MD5摘要,然後在摘要中再將這16位數字按規則摻入形成一個48位的字串。在驗證密碼時再從48位字串中按規則提取16位數字,和使用者輸入的密碼相加再MD5。按照這種方法形成的結果肯定是不可直接反查的,且同一個密碼每次儲存時形成的摘要也都是不同的。
加鹽的演算法有很多,考慮到加鹽的目的(防止擁有系統底層許可權的人員),想做到絕對不可反查是很困難的,需要有其他軟體或者硬體的協助,在很多場景下的實用性比較差。如果只是想增加反查的難度,倒是有很多方法可以選擇,一種便利的方法是md5(Password+UserName),即將使用者名稱和密碼字串相加再MD5,這樣的MD5摘要基本上不可反查。但有時候使用者名稱可能會發生變化,發生變化後密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。
因此我們做了一個非常簡單的演算法,每次儲存密碼到資料庫時,都生成一個隨機16位數字,將這16位數字和密碼相加再求MD5摘要,然後在摘要中再將這16位數字按規則摻入形成一個48位的字串。在驗證密碼時再從48位字串中按規則提取16位數字,和使用者輸入的密碼相加再MD5。按照這種方法形成的結果肯定是不可直接反查的,且同一個密碼每次儲存時形成的摘要也都是不同的。