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,图片压缩还在作,有须要的朋友我作完后能够把源代码分享出来

相关文章
相关标签/搜索