php 签名 验签

2021-02-05 1197 阅读 0评论

<?php


// 设置一个公钥(key)和私钥(secret),公钥用于区分用户,私钥加密数据,不能公开

$key = "c4ca4238a0b923820dcc509a6f75849b";

$secret = "28c8edde3d61a0411511d3b1866f0636";


echo md5($secret)."<hr>";



// 待发送的数据包

/* $data = array(

    'username' => 'abc@qq.com',

    'sex' => '1',

    'age' => '16',

    'addr' => 'guangzhou',

    'key' => $key,

    'timestamp' => time(),

); */


$data = $_GET;

$data['token']=$secret;

$data['timestamp']=time();

print_r($data);

echo "<hr>";

// 获取sign

function getSign($secret, $data) {

    // 对数组的值按key排序

    ksort($data);

    // 生成url的形式

    $params = http_build_query($data);

    // 生成sign

    $sign = md5($params . $secret);

    return $sign;

}


// 发送的数据加上sign

$data['sign'] = getSign($secret, $data);


/**

 * 后台验证sign是否合法

 * @param  [type] $secret [description]

 * @param  [type] $data   [description]

 * @return [type]         [description]

 */

function verifySign($secret, $data) {

    // 验证参数中是否有签名

    if (!isset($data['sign']) || !$data['sign']) {

        echo '发送的数据签名不存在';

        die();

    }

    if (!isset($data['timestamp']) || !$data['timestamp']) {

        echo '发送的数据参数不合法';

        die();

    }

    // 验证请求, 10分钟失效

    if (time() - $data['timestamp'] > 600) {

        echo '验证失效, 请重新发送请求';

        die();

    }

//取出签名

    $sign = $data['sign'];

//删除数组中的签名

    unset($data['sign']);

//对数组的值按key排序

    ksort($data);

//生成url的形式

    $params = http_build_query($data);

    // $secret 是通过 key 在 api 的数据库中查询得到,或者直接指定

    $sign2 = md5($params . $secret);

    if ($sign == $sign2) {

//return true;

        die('验证通过');

    } else {

        die('请求不合法');

    }

}


//print_r($data);


verifySign($secret, $data);


?>


喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 1197人围观)