UCenter 中,對於其他系統整合或匯出資料到 UCenter 系統,通常會遇到密碼生成的問題,這裡就討論一下 UCenter 的使用者密碼演演算法規則和生成
方法。
密碼通常使用 MD5 對使用者密碼 HASH
後儲存在資料庫中的方法,如果駭客拿到了這個 HASH 數值,那麼可以採用字典的方式暴力破解,如果這個字典資料庫足夠大,並且字典比較符合人們的設定習慣
的話,那很容易就能破解常見的密碼,因此 UCenter 採用了 salt 來防止這種暴力破解,salt 是一隨機字串,它與口令連線在一起,再用單向函式對
其運算,然後將 salt 值各單向函式運算的結果存入資料庫中。如果可能的 salt 值的數目足夠大的話,它實際上就消除了對常用口令採用的字典式攻擊,因為
駭客不可能在資料庫中儲存那麼多 salt 和使用者密碼組合後的 HASH 值。
UCenter 的創始人密碼是儲存在檔案中的,開啟 uc 下面
/data/config.inc.php 檔案,裡面的 UC_FOUNDERPW 儲存的就是密碼,而 UC_FOUNDERSALT 儲存的是 SALT 數值,
創始人密碼的建立規則是:UC_FOUNDERPW=md5(md5(PASSWORD).UC_FOUNDERSALT),就是先將密碼 MD5,然後添
加 salt,然後再次 MD5,產生的 HASH 數值儲存在 config.inc.php 檔案中,因此修改 UC_FOUNDERPW 裡面的數值就可以修改
UCenter 的創始人密碼。
UCenter 的使用者資訊是儲存在 uc_members 表中,在這個表中,每個使用者都有一個不同的隨機
salt 欄位,表中的 password 欄位為計算後的密碼,密碼計算規則是 $password=md5(md5($password).$salt),也
就是將使用者的密碼 MD5 後,新增 salt,然後再 MD5,儲存在 password 欄位中。
因此,如果進行不同系統的資料轉換,可以根據
這個原理,將其他系統的使用者名稱和密碼計算後,匯入 UCenter 的 uc_members 表中,實現使用者的遷移。例如,如果原有系統使用的是
md5(password) 這樣的演演算法儲存密碼,那就透過程式隨機生成 salt,然後計算兩者累加後的 md5,這樣就很容易計算出這個使用者在
UCenter 中的使用者密碼 HASH 值,從而實現使用者的無縫遷移。
不過,如果原有系統使用的是 md5(password+salt) 的
方式儲存的密碼,那就無法實現密碼的平滑遷移 UCenter 了,即使遷移,也只能人為將其 UCenter 的 password 增加一個 salt 才能使用,因
此,我們在平時設計系統使用者密碼的時候,應該儘量採用 md5(md5(password)+salt) 的方式儲存密碼,這樣才能方便的實現和
UCenter 的介面,並且保證了安全性,通常對於英文使用者名稱來說,自建系統使用 username 來做 salt 是個簡便的方法。