API接口加密校驗源代碼分享
API接口做好了,總不能裸奔調用吧,也不能在HTTP/HTTS里鍵入約定的密鑰模式,下面給大家介紹一種簡單的API接口加密驗證
API接口加密通信思路:
1. 約定密鑰,密鑰在實際操作中可以做個配置文件,隨意更換
2. 生成時間戳、隨機數、簽名生成的字符串
3.推送到API服務端做加密校對識別
API接口通信服務端加密類源代碼類
class encry { const TOKEN = 'API'; //響應前台的請求 public function respond(){ //驗證身份;接收前台傳過來的參數 $timeStamp = isset($_GET['t']) ? $_GET['t'] :'';//時間 $randomStr = isset($_GET['r']) ? $_GET['r'] :'';//隨機數 $signature = isset($_GET['s']) ? $_GET['s'] :'';//簽名 $str = $this -> arithmetic($timeStamp,$randomStr);//通過前台傳過來的時間戳跟隨機數重新按照簽名函數進行生成一遍簽名 //然后將傳過來簽名跟,自己重新生成的簽名進行比對 if($str != $signature){ $arr['success'] = '0'; $arr['msg'] = '無權訪問'; } else{ $arr['success'] = '1'; $arr['msg'] = 'success'; } echo json_encode($arr,JSON_UNESCAPED_UNICODE); } /** * @param $timeStamp 時間戳 * @param $randomStr 隨機字符串 * @return string 返回簽名 */ public function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小寫順序排序 sort($arr,SORT_STRING); $str = implode($arr);//拼接成字符串 $signature = sha1($str);//SHA-1加密 $signature = md5($signature);//MD5=加密 $signature = strtoupper($signature);//轉換成大寫 return $signature; } }
客戶端調用API接口推送加密代碼類
class apiget{ const TOKEN = 'API';//密鑰 const APIURL = 'http://www.68v8.com/api.php';//模擬前台請求服務器api接口 public function getDataFromServer(){ $timeStamp = time();//時間戳 $randomStr = $this -> createNonceStr();//隨機數 $signature = $this -> arithmetic($timeStamp,$randomStr);//生成簽名,這里生成簽名方法自己定義,可以用這個方法,也可以用非對稱加密都可以; $url = self::APIURL."?t={$timeStamp}&r={$randomStr}&s={$signature}";//url地址:地址中傳遞的三個參數,可以直接這樣傳遞,也可以用非對稱加密加密完成后再傳到地址中都可以 $result = $this -> httpGet($url); echo($result); } //curl模擬get請求。 private function httpGet($url){ $curl = curl_init(); curl_setopt($curl,CURLOPT_URL,$url);//需要請求的是哪個地址 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//表示把請求的數據已文件流的方式輸出到變量中 $result = curl_exec($curl); curl_close($curl); return $result; } //隨機生成字符串 private function createNonceStr($length = 8) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return "z".$str; } /** * @param $timeStamp 時間戳 * @param $randomStr 隨機字符串 * @return string 返回簽名 */ private function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小寫順序排序 sort($arr,SORT_STRING); $str = implode($arr);//拼接成字符串 $signature = sha1($str);//SHA-1加密加密 $signature = md5($signature);//MD5加密 $signature = strtoupper($signature);//轉換成大寫 return $signature; } }
調用類
$apiget = new apiget(); $apiget->getDataFromServer();
授人以魚不如授人以漁,分享是一種快樂,簡單的代碼能夠對你們有用也是一種快樂,技術交流微信號:15889726201