加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php-app开发接口加密

发布时间:2020-05-25 23:18:08 所属栏目:PHP 来源:互联网
导读:自己平时工作中用到的一套接口加密规则,记录下来以后用:/**inc解析接口客户端接口传输规则:1.用cmd参数(base64)来动态调用不同的接口,接口地址统一为 http://a.lovexpp.com2.将要传过来的参数组成一个数组,数组添加timestamp元素(当前时间戳,精确到秒),将

自己平时工作中用到的一套接口加密规则,记录下来以后用:

<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(),

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读