|
自己平时工作中用到的一套接口加密规则,记录下来以后用:
<span style="color: #800080;">$xpp_key = "xxx"<span style="color: #000000;">;
<span style="color: #008000;">//<span style="color: #008000;">接收参数param,将结果解析json得到参数数组
<span style="color: #800080;">$param = json_decode(<span style="color: #800080;">$_POST['param'],<span style="color: #0000ff;">true<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">取出sign,去掉参数数组中的sign
<span style="color: #800080;">$client_sign = <span style="color: #800080;">$param['sign'<span style="color: #000000;">];
<span style="color: #0000ff;">unset(<span style="color: #800080;">$param['sign'<span style="color: #000000;">]);
<span style="color: #008000;">//<span style="color: #008000;">将参数数组key值按照自然排序从大到小排序
<span style="color: #008080;">krsort(<span style="color: #800080;">$param<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">将排序后的参数数组按照key=val&key=val的形式组成字符串,将字符串与XPP_KEY连接,用md5加密一次(32位小写),得到sign
<span style="color: #800080;">$sb = ''<span style="color: #000000;">;
<span style="color: #0000ff;">foreach(<span style="color: #800080;">$param <span style="color: #0000ff;">as <span style="color: #800080;">$key=><span style="color: #800080;">$val<span style="color: #000000;">){
<span style="color: #800080;">$sb .= <span style="color: #800080;">$key . '=' . <span style="color: #800080;">$val . '&'<span style="color: #000000;">;
}
<span style="color: #800080;">$sb .= <span style="color: #800080;">$xpp_key<span style="color: #000000;">;
<span style="color: #800080;">$server_sign = <span style="color: #008080;">md5(<span style="color: #800080;">$sb<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">将sign与客户端传过来的sign进行比对,如不一样则可能是中途被篡改参数,服务器拒绝此次请求
<span style="color: #0000ff;">if(<span style="color: #800080;">$server_sign !== <span style="color: #800080;">$client_sign<span style="color: #000000;">){
<span style="color: #0000ff;">echo json_encode(<span style="color: #0000ff;">array('code'=>'invalid request'<span style="color: #000000;">));
<span style="color: #0000ff;">exit<span style="color: #000000;">;
}
<span style="color: #008000;">//<span style="color: #008000;">将sign与session中的sign对比,如果一样,则为重复提交,服务器拒绝此次请求
<span style="color: #0000ff;">if(<span style="color: #800080;">$server_sign == <span style="color: #800080;">$_SESSION['last_sign'<span style="color: #000000;">]){
<span style="color: #0000ff;">echo json_encode(<span style="color: #0000ff;">array('code'=>'Repeated requests'<span style="color: #000000;">));
<span style="color: #0000ff;">exit<span style="color: #000000;">();
}
<span style="color: #008000;">//<span style="color: #008000;">此次的sign存入session
<span style="color: #800080;">$_SESSION['last_sign'] = <span style="color: #800080;">$server_sign<span style="color: #000000;">;
<span style="color: #008000;">//<span style="color: #008000;">执行路由cmd(base64解析后),将参数带到该方法中
<span style="color: #800080;">$cmd = <span style="color: #008080;">base64_decode(<span style="color: #800080;">$param['cmd'<span style="color: #000000;">]);
<span style="color: #0000ff;">list(<span style="color: #800080;">$controller,<span style="color: #800080;">$action) = <span style="color: #008080;">explode('-',<span style="color: #800080;">$cmd<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;"> 设置请求参数
<span style="color: #0000ff;">unset(<span style="color: #800080;">$param['cmd'<span style="color: #000000;">]);
<span style="color: #0000ff;">unset(<span style="color: #800080;">$param['timestamp'<span style="color: #000000;">]);
<span style="color: #0000ff;">foreach(<span style="color: #800080;">$param <span style="color: #0000ff;">as <span style="color: #800080;">$key => <span style="color: #800080;">$val<span style="color: #000000;">){
<span style="color: #800080;">$_REQUEST[<span style="color: #800080;">$key] = <span style="color: #800080;">$val<span style="color: #000000;">;
}
客户端代码demo:
package com.xpplove.newxpp..util..util..util..util..apache.commons.codec.binary..os..alibaba.fastjson..xpplove.newxpp..xpplove.newxpp.bean..xpplove.newxpp.net..xpplove.newxpp.utils. TestActivity url = "http://c.lovexpp.com/".= <,> paramsMap = HashMap<,>.put("timestamp",(.currentTimeMillis() / 1000 + "" cmd = (base64.encode("user-camList". dcmd = (base64.decode(cmd..put("cmd",.put("sign", str == HashMap<,>.put("param",= .listener =.url =
NetPostTask(paramsMap). void onGetResult(int errorCode,.onGetResult(errorCode,.out. getString(Map<,>= = tm.descendingMap().entrySet().= (i..append(i.() + "&". DensityUtil.(buffer.
getKeyValues(Map<,>= = tm.descendingKeySet(). jsonText = JSON.toJSONString(tm.descendingMap(),
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|