html5實現DisuzX論壇手機版ucenter頭像修改

discuz的手機版是沒有自帶頭像上傳的功能,而pc版是用flash實現的上傳,不能直接用於手機版。php

首先先分析一下pc版的頭像修改原理,經過抓包,提取了保存頭像的url:html

http://bbs.xxx.com/uc_server/index.php?m=user&inajax=1&a=rectavatar&appid=6&input=505cxOPHNAZBu0%2BLniUJP%2FZOv2JzDosSeZPNE1h0pHRndy%2FsdZgUbJNF5Y%2F18DQTM9BpQx8HBRHC%2FQMMvtR%2BM%2BKXjuKvZNT9RpVBRSW7d9%2FE0rdmpT%2BYQJ7MgT4%2FKQ&agent=cebb72c45300dbe0c0915005c15e6d24&avatartype=virtual 前端

同時post 3種尺寸的頭像,詳細參數以下:html5

路徑知道了,就開始看代碼,構造請求jquery

url的生成算法:ajax

<!--{eval $uc_avatarpost = UC_API.'/index.php?m=user&inajax=1&a=rectavatar&appid='.UC_APPID.'&input='.uc_api_input("uid=$_G[uid]").'&agent='.md5($_SERVER['HTTP_USER_AGENT']).'&avatartype=virtual';}-->算法

頭像壓縮算法:
api

從抓包的結果上看是16進制的編碼,但從服務端代碼(uc_server/control/user.php)你會發現是加密過的16進制,服務端解密算法以下app

function flashdata_decode($s) {
		$r = '';
		$l = strlen($s);
		for($i=0; $i<$l; $i=$i+2) {
			$k1 = ord($s[$i]) - 48;
			$k1 -= $k1 > 9 ? 7 : 0;
			$k2 = ord($s[$i+1]) - 48;
			$k2 -= $k2 > 9 ? 7 : 0;
			$r .= chr($k1 << 4 | $k2);
		}
		return $r;
	}

但,咱們須要加密算法,pc版是經過flash處理的,因此咱們看不到源代碼,沒法仿製,只能經過解密算法去推測加密算法。post

簡單的混淆和位運算,我沒有去測試,而是修改了user.php,哪位大神有現成的加密算法不妨分享一下+_+~

前端上傳組件我用的是 jquery.html5_upload.js,圖片壓縮還在作,有須要的朋友我作完後能夠把源代碼分享出來

相關文章
相關標籤/搜索