UCenter密碼算法規(guī)則
密碼通常使用MD5對用戶密碼HASH后保留在數(shù)據(jù)庫中的方法,假如有了這個HASH數(shù)值,那么可以采用字典的方式暴力破解,如果說字典數(shù)據(jù)夠大的話,是非常容易把密碼破解,但是UCenter采用了salt來防止這種暴力破解,salt是一隨機字符串,它與口令連接在一起,再用單向函數(shù)對其運算,然后將salt值各單向函數(shù)運算的結果存入數(shù)據(jù)庫中。假如可能的salt值的數(shù)量足夠大的話,它實際上就消除了對常用口令采用的字典式攻擊。
UCenter的創(chuàng)始人密碼是保留在文件中的,打開uc下面/data/config.inc.php文件,里面的UC_FOUNDERPW保留的就是密碼,而UC_FOUNDERSALT保留的是SALT數(shù)值,創(chuàng)始人密碼的創(chuàng)建規(guī)則是:UC_FOUNDERPW=md5(md5(PASSWORD).UC_FOUNDERSALT),就是先將密碼MD5,然后添加salt,然后再次MD5,產生的HASH數(shù)值保留在config.inc.php文件中,因此修改UC_FOUNDERPW里面的數(shù)值就可以修改UCenter的創(chuàng)始人密碼。
UCenter的用戶信息是保留在uc_members表中,在這個表中,每個用戶都有一個不同的隨機salt字段,表中的password字段為計算后的密碼,密碼計算規(guī)則是$password=md5(md5($password).$salt),也就是將用戶的密碼MD5后,添加salt,然后再MD5,保留在password字段中。
因此,假如進行不同系統(tǒng)的數(shù)據(jù)轉換,可以根據(jù)這個原理,將其他系統(tǒng)的用戶名和密碼計算后,導入UCenter的uc_members表中,實現(xiàn)用戶的遷移。例如,假如原有系統(tǒng)使用的是md5(password)這樣的算法保留密碼,那就通過程序隨機生成salt,然后計算兩者累加后的md5,這樣就很輕易計算出這個用戶在UCenter中的用戶密碼HASH值,從而實現(xiàn)用戶的無縫遷移。
假如原有系統(tǒng)使用的是md5(password+salt)的方式保留的密碼,那就無法實現(xiàn)密碼的平滑遷移UCenter了,即使遷移,也只能人為將其UCenter的password增加一個salt才能使用,因此,我們在平時設計系統(tǒng)用戶密碼的時候,應該盡量采用md5(md5(password)+salt)的方式保留密碼,這樣才能利便的實現(xiàn)和UCenter的接口,并且保證了安全性。








