PHP 開發API介面簽名驗證 一

2021-08-06 01:39:40 字數 1799 閱讀 2024

**

就安全來說,所有客戶端和伺服器端的通訊內容應該都要通過加密通道(https)傳輸,明文的http通道將會是man-in-the- middle及其各種變種攻擊的溫床。所謂man-in-the-middle攻擊簡單講就是指惡意的黑客可以在客戶端和伺服器端的明文通訊通道上做手 腳,黑客可以監聽通訊內容,偷取機密資訊,甚至可以篡改通訊內容,而通過加密後的通訊內容理論上是無法被破譯的。

簽名演算法如下:

注意:請保證http請求資料編碼務必為utf-8格式,url也務必為utf-8編碼格式。

引數:

$array=[

'menu'=>'客戶服務列表',

'lat'=>21.223,

'lng'=>131.334];

對應簽名演算法

//

1. 對加密陣列進行字典排序

foreach ($array

as$key=>$value)

sort($arr); //

字典排序的作用就是防止因為引數順序不一致而導致下面拼接加密不同

// 2. 將key和value拼接

$str = "";

foreach ($arr

as$k => $v

) //

3. 通過sha1加密並轉化為大寫

//4. 大寫獲得簽名

$sign = strtoupper(sha1($restr));

將生產的sign簽名一起寫入array中,通過約定好的method方式傳送引數到請求介面

$array['sign']=$sign;
列印$array

array

( [lat] => 21.223[lng] => 131.334[sign] =>c096d7811e944386ce880597ba334a5ab640b088

)

客戶端將資料封裝xml或json傳送到服務端,服務端先解析

$serverarray= json_decode($json,true);
if($model)

按照相同的字典排序與演算法生成服務端的$sign ,判斷$sign 是否相同。

$clientsign=$array['sign'];

unset($serverarray['sign']);

#生成服務端str

$serverstr = "";

foreach ($serverarray

as$k => $v

) $reserverstr=$str.$serversecret

;$reserversign = strtoupper(sha1($reserverstr

));if($clientsign!=$reserversign

)else

附加:有時,我們使用hash_hmac進行加密(我們專案中使用……)

/*

* 生成簽名,$args為請求引數,$key為私鑰 */

function makesignature($args, $key)

else

ksort($args

);

$requeststring = '';

foreach($args

as$k => $v

)

$newsign = hash_hmac("md5",strtolower($requeststring) , $key

);

return

$newsign

;}

PHP 開發API介面簽名驗證

就安全來說,所有客戶端和伺服器端的通訊內容應該都要通過加密通道 https 傳輸,明文的http通道將會是man in the middle及其各種變種攻擊的溫床。所謂man in the middle攻擊簡單講就是指惡意的黑客可以在客戶端和伺服器端的明文通訊通道上做手 腳,黑客可以監聽通訊內容,偷...

API介面簽名驗證

系統從外部獲取資料時,通常採用api介面呼叫的方式來實現。請求方和介面提供方之間的通訊過程,有這幾個問題需要考慮 1 請求引數是否被篡改 2 請求 是否合法 3 請求是否具有唯一性。今天跟大家 一下主流的通訊安全解決方案。引數簽名方式 這種方式是主流。它要求呼叫方按照約定好的演算法生成簽名字串,作為...

API介面簽名驗證

api介面分為開放介面和私密介面。什麼是開放介面?什麼是私密介面?我們乙個乙個介紹它們簽名的驗證,先介紹開放api介面。下面我們稱呼發布介面方為 api arg1 value1,name fdfd,age 12 按照引數名的字母前後順序進行重新排序 3.然後再將排序好的引數,加上secrte 加上當...