首頁  >  文章  >  後端開發  >  php介面加密怎麼做

php介面加密怎麼做

王林
王林原創
2019-09-26 17:39:372697瀏覽

php介面加密怎麼做

解析介面
客戶端介面傳輸規則:
1.用cmd參數(base64)來動態呼叫不同的介面,介面位址統一為http://a.lovexpp.com。

2.將要傳過來的參數組成一個數組,數組添加timestamp元素(當前時間戳,精確到秒),將數組的鍵值按照自然排序從大到小排序

# 3.將陣列組成key=val&key=val的形式的字串,將字串與XPP_KEY連接在一起,用md5加密一次(32位元小寫),得到sign

4.將sign加入到參數陣列中

5.將參數陣列轉換成json用post請求請求介面位址,key值為param

服務端介面解析規則:

1.接收參數param,將結果解析json得到參數數組

2.取出sign,去掉參數數組中的sign

3.將參數數組key值依照自然排序從大到小排序

4.將排序後的參數陣列依照key=val&key=val的形式組成字串,將字串與XPP_KEY連接,用md5加密一次(32位元小寫),得到sign

5.將sign與客戶端傳過來的sign進行比對,如不一樣則可能是中途被篡改參數,伺服器拒絕此次請求

6.將sign與session中的sign對比,如果一樣,則為重複提交,伺服器拒絕此次請求

7.此次的sign存入session

#8.執行路由cmd(base64解析後),將參數帶到方法中

<?php

$xpp_key = "xxx";

//接收参数param,将结果解析json得到参数数组
$param = json_decode($_POST[&#39;param&#39;] , true);

//取出sign,去掉参数数组中的sign
$client_sign = $param[&#39;sign&#39;];
unset($param[&#39;sign&#39;]);

//将参数数组key值按照自然排序从大到小排序
krsort($param);

//将排序后的参数数组按照key=val&key=val的形式组成字符串,将字符串与XPP_KEY连接,用md5加密一次(32位小写),得到sign
$sb = &#39;&#39;;
foreach($param as $key=>$val){
$sb .= $key . &#39;=&#39; . $val . &#39;&&#39;;
}
$sb .= $xpp_key;
$server_sign = md5($sb);

//将sign与客户端传过来的sign进行比对,如不一样则可能是中途被篡改参数,服务器拒绝此次请求
if($server_sign !== $client_sign){
echo json_encode(array(&#39;code&#39;=>&#39;invalid request&#39;));
exit;
}

//将sign与session中的sign对比,如果一样,则为重复提交,服务器拒绝此次请求
if($server_sign == $_SESSION[&#39;last_sign&#39;]){
echo json_encode(array(&#39;code&#39;=>&#39;Repeated requests&#39;));
exit();
}

//此次的sign存入session
$_SESSION[&#39;last_sign&#39;] = $server_sign;

//执行路由cmd(base64解析后),将参数带到该方法中
$cmd = base64_decode($param[&#39;cmd&#39;]);
list($__controller,$__action) = explode(&#39;-&#39; , $cmd);

// 设置请求参数
unset($param[&#39;cmd&#39;]);
unset($param[&#39;timestamp&#39;]);
foreach($param as $key => $val){
$_REQUEST[$key] = $val;
}

推薦教學:PHP影片教學

#

以上是php介面加密怎麼做的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn