html5实现DisuzX论坛手机版ucenter头像修改

discuz的手机版是没有自带头像上传的功能,而pc版是用flash实现的上传,不能直接用于手机版。

首先先分析一下pc版的头像修改原理,通过抓包,提取了保存头像的url:

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实现DisuzX论坛手机版ucenter头像修改_第1张图片

路径知道了,就开始看代码,构造请求

url的生成算法:

<!--{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';}-->

头像压缩算法:

从抓包的结果上看是16进制的编码,但从服务端代码(uc_server/control/user.php)你会发现是加密过的16进制,服务端解密算法如下

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处理的,所以我们看不到源代码,无法仿制,只能通过解密算法去推测加密算法。

简单的混淆和位运算,我没有去测试,而是修改了user.php,哪位大神有现成的加密算法不妨分享一下+_+~

前端上传组件我用的是 jquery.html5_upload.js,图片压缩还在做,有需要的朋友我做完后可以把源代码分享出来

你可能感兴趣的:(html5实现DisuzX论坛手机版ucenter头像修改)