discuz的手机版是没有自带头像上传的功能,而pc版是用flash实现的上传,不能直接用于手机版。php
首先先分析一下pc版的头像修改原理,经过抓包,提取了保存头像的url:html
同时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,图片压缩还在作,有须要的朋友我作完后能够把源代码分享出来