日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php开发api数据加密,php-app开发接口加密

發(fā)布時(shí)間:2024/9/27 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php开发api数据加密,php-app开发接口加密 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章主要為大家詳細(xì)介紹了php-app開(kāi)發(fā)接口加密規(guī)則,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

自己平時(shí)工作中用到的一套接口加密規(guī)則,記錄下來(lái)以后用:

/**

inc

解析接口

客戶(hù)端接口傳輸規(guī)則:

1.用cmd參數(shù)(base64)來(lái)動(dòng)態(tài)調(diào)用不同的接口,接口地址統(tǒng)一為 http://a.lovexpp.com

2.將要傳過(guò)來(lái)的參數(shù)組成一個(gè)數(shù)組,數(shù)組添加timestamp元素(當(dāng)前時(shí)間戳,精確到秒),將數(shù)組的鍵值按照自然排序從大到小排序

3.將數(shù)組組成 key=val&key=val的形式的字符串,將字符串與XPP_KEY連接在一起,用md5加密一次(32位小寫(xiě)),得到sign

4.將sign添加到參數(shù)數(shù)組中

5.將參數(shù)數(shù)組轉(zhuǎn)換成json用post請(qǐng)求請(qǐng)求接口地址,key值為param

服務(wù)端接口解析規(guī)則:

1.接收參數(shù)param,將結(jié)果解析json得到參數(shù)數(shù)組

2.取出sign,去掉參數(shù)數(shù)組中的sign

3.將參數(shù)數(shù)組key值按照自然排序從大到小排序

4.將排序后的參數(shù)數(shù)組按照key=val&key=val的形式組成字符串,將字符串與XPP_KEY連接,用md5加密一次(32位小寫(xiě)),得到sign

5.將sign與客戶(hù)端傳過(guò)來(lái)的sign進(jìn)行比對(duì),如不一樣則可能是中途被篡改參數(shù),服務(wù)器拒絕此次請(qǐng)求

6.將sign與session中的sign對(duì)比,如果一樣,則為重復(fù)提交,服務(wù)器拒絕此次請(qǐng)求

7.此次的sign存入session

8.執(zhí)行路由cmd(base64解析后),將參數(shù)帶到該方法中

*/

$xpp_key = "xxx";

//接收參數(shù)param,將結(jié)果解析json得到參數(shù)數(shù)組

$param = json_decode($_POST['param'] , true);

//取出sign,去掉參數(shù)數(shù)組中的sign

$client_sign = $param['sign'];

unset($param['sign']);

//將參數(shù)數(shù)組key值按照自然排序從大到小排序

krsort($param);

//將排序后的參數(shù)數(shù)組按照key=val&key=val的形式組成字符串,將字符串與XPP_KEY連接,用md5加密一次(32位小寫(xiě)),得到sign

$sb = '';

foreach($param as $key=>$val){

$sb .= $key . '=' . $val . '&';

}

$sb .= $xpp_key;

$server_sign = md5($sb);

//將sign與客戶(hù)端傳過(guò)來(lái)的sign進(jìn)行比對(duì),如不一樣則可能是中途被篡改參數(shù),服務(wù)器拒絕此次請(qǐng)求

if($server_sign !== $client_sign){

echo json_encode(array('code'=>'invalid request'));

exit;

}

//將sign與session中的sign對(duì)比,如果一樣,則為重復(fù)提交,服務(wù)器拒絕此次請(qǐng)求

if($server_sign == $_SESSION['last_sign']){

echo json_encode(array('code'=>'Repeated requests'));

exit();

}

//此次的sign存入session

$_SESSION['last_sign'] = $server_sign;

//執(zhí)行路由cmd(base64解析后),將參數(shù)帶到該方法中

$cmd = base64_decode($param['cmd']);

list($__controller,$__action) = explode('-' , $cmd);

// 設(shè)置請(qǐng)求參數(shù)

unset($param['cmd']);

unset($param['timestamp']);

foreach($param as $key => $val){

$_REQUEST[$key] = $val;

}

客戶(hù)端代碼demo:

package com.xpplove.newxpp.activity;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.TreeMap;

import org.apache.commons.codec.binary.Base64;

import android.os.Bundle;

import com.alibaba.fastjson.JSON;

import com.xpplove.newxpp.BaseActivity;

import com.xpplove.newxpp.bean.Params;

import com.xpplove.newxpp.net.NetPostTask;

import com.xpplove.newxpp.utils.DensityUtil;

public class TestActivity extends BaseActivity {

private String url = "http://c.lovexpp.com/";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

loadMesage();

}

private void loadMesage() {

Base64 base64 = new Base64();

Map paramsMap = new HashMap();

paramsMap.put("timestamp", (System.currentTimeMillis() / 1000 + ""));

String cmd = new String(base64.encode("user-camList".getBytes()));

String dcmd = new String(base64.decode(cmd.getBytes()));

paramsMap.put("cmd", cmd);

paramsMap.put("sign", getString(paramsMap));

String str = getKeyValues(paramsMap);

paramsMap = new HashMap();

paramsMap.put("param", str);

Params params = new Params();

params.listener = this;

params.url = url;

//new NetWorkTask().executeProxy(params);

new NetPostTask(paramsMap).executeProxy(params);

}

@Override

public void onGetResult(int errorCode, Object result) {

super.onGetResult(errorCode, result);

System.out.println();

}

private String getString(Map paramsMap) {

TreeMap tm = new TreeMap(paramsMap);

Iterator i = tm.descendingMap().entrySet().iterator();

StringBuffer buffer = new StringBuffer();

while (i.hasNext()) {

buffer.append(i.next() + "&");

}

buffer.append(AppKey);

return DensityUtil.MD5(buffer.toString());

}

// 得到鍵值對(duì)

private String getKeyValues(Map paramsMap) {

TreeMap tm = new TreeMap(paramsMap);

Iterator i = tm.descendingKeySet().iterator();

String jsonText = JSON.toJSONString(tm.descendingMap(), true);

return jsonText;

}

}

相關(guān)推薦:

總結(jié)

以上是生活随笔為你收集整理的php开发api数据加密,php-app开发接口加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。