api加密與校驗
阿新 • • 發佈:2022-04-17
一、函式程式碼
/** * 校驗 * @data (請求的陣列) * @salt (加密鹽) * */ private function verify(array $data, $salt){ $sign = $data['sign'] ?? null; if(!$sign) return false; unset($data['sign']); return $sign === hash('sha256', $this->serial($data) . $salt); } /** * 生成簽名 * @data (請求的陣列) * @salt (加密鹽) * */ private function sign(array $data, $salt){ return hash('sha256', $this->serial($data) . $salt); } /** *生成一個經過 URL-encode 的請求字串 * @data (請求的陣列) * */ private function serial(array$data){ ksort($data);//按照鍵名對陣列排序 return http_build_query($data); }
二、校驗方式
$jsonData = file_get_contents("php://input"); $postData = json_decode($jsonData,true); if(!$this->verify($postData["data"],$salt)){ trace("簽名錯誤了!!!!!!!!!!!!!","ERROR");return false; }
三、加密方式
$retData = ['openlink' => "","timestamp" =>time()]; $retData["sign"] = $this->sign($retData,$salt); $this->success('返回成功', $retData);