首页 > 技术文章 > api加密与校验

shenqilun 2022-04-16 14: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);

  

推荐阅读