關于discuz ucenter 在解密的時候,用uc_authcode或_authcode解不開密碼.
吐槽:針對于discuz和ucenter這個東西,個人感覺太復雜,也太垃圾,現在好多網上去搜索的時候基本都是單點登陸,但是這個單點登陸局限性太大,所以我們要做雙向登陸就會出現一些問題,下面說一下為何解不開密碼.
問題1:為何找不到Example_auth這個cookie名稱.
答:每個應用discuz ucenter的時候,都會生成_auth,而前面的Example的意思是說明,除非你自己定義cookie名稱叫Example_auth,而當我們去輸出cookie的時候,會找到這樣的名稱:****_auth,這里的星號代表是生成的信息,所以不用去管他,直接將****_auth對應的字符進行解密即可.
問題2:按照問題1中的所說還是解不開密碼,返回是空的.
答:這是因為秘鑰不對應導致的,這里說明一下,我們在根目錄創建的config.inc.php里面有個全局變量UC_KEY這是個秘鑰,但是當我們去網站根目錄的bbs/config文件夾下面找到配置文件config_ucenter.php中海油一個UC_KEY,但是我們發現,都是UC_KEY但是實際值卻不一樣,根據他的命名 ,UC_KEY可以很明顯的看出是ucenter的秘鑰,但是卻一樣啊。所以說,discuz和ucenter很垃圾啊。
都吧我給搞暈了,這里先不管他,到底是什么key,暫時我們不動他就可以,然后我們找到根目錄下的api/uc.php中的synlogin這個方法,然后我們可以看到這句話dsetcookie('auth', authcode("$member[password]/t$member[uid]", 'ENCODE'), $cookietime);這里我就不說是多少行了,代碼都被我給弄亂了。我們追蹤authcode這個方法,發現這個方法在根目錄下的bbs/source/function/function_core.php這個文件里面。因為authcode這個字符串實際就是加密的cookie信息。
然后我們找到authcode這個方法,可以看到$key = md5($key != '' ? $key : getglobal('authkey'));實際上如果你仔細的話,可以看到authcode這個方法在調用的時候根本就沒有變量,所以,這里的key是空的,所以使用了getglobal這個東西,但是這個getglobal返回過來的根本不是誰的key(UC和discuz的key都不是這個),呢我們就不管他,你可以使用bug測試,看看這個key到底是哪個秘鑰,實際上就是這里出的問題,但是為了保證其不修改人家代碼的原則,我們自己修改自己的代碼即可。直接在uc.php中的synlogin()方法中添加即可,如下:
if(($member = getuserbyuid($uid, 1))) {
$key = "111111111111111111";//自己定義key,然后在解密的時候直接用這個key就可以了.
dsetcookie('auth', authcode("$member[password]/t$member[uid]", 'ENCODE', $key) , $cookietime );}
我們在我們自己的頁面獲取cookie,代碼如下:
- Yii::import('application.vendor.*');
- include_once 'ucenter.php';
- $model = new LoginForm;
- $key = "111111111111111111";//使用上面自己定義的key就可以了
- $mm = uc_authcode($_COOKIE['b7R7_2132_auth'], 'DECODE',$key); //Vevb.com
- print_r($mm);
至于這里為何有包含的文件,這里我就不說了,在我的博客中有詳細介紹yii與discuz雙向登陸、注冊、退出代碼實例。然后我們這里用的uc_authcode方法,在根目錄uc_client/client.php文件中。我們可以看出和authcode的代碼基本一樣,上面我們說過時UC_KEY不一致導致的,這里$key = md5($key ? $key : UC_KEY);可以看到還是有UC_KEY,然后我們去吧這句話替換成如下:
md5("這里是UC_kEY");如果你不知道是哪個KEY,你就自己試試,反正就2個UC_KEY,然后得到的結果就是分2段.
前面是用戶密碼,后面是用戶id這里沒有用戶名,我們可以根據用戶id獲取對應的用戶名即可。然后我們呢就可以隨意操作了。
tips:博客中有關于yii與discuz互通的信息,以及yii與discuz之間通信的步驟代碼都會詳細記錄,不懂的可以發消息給我,經過本人1周多的時間研究把這部分給弄出來了,在此,感謝我的文件mmm.txt呵呵,在測試代碼追蹤中,mmm.txt記錄了我的追蹤過程,mmm.txt經過刪除,新生成不下上百遍。
新聞熱點
疑難解答