PHP开发API接口签名验证

本文介绍了一种基于SHA256的HMAC算法实现的服务端数据签名验证机制,包括生成签名、验证签名完整性和时效性的具体步骤。通过使用私钥和时间戳,确保了数据传输的安全性和防止重放攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 服务端验证签名
 */
class ApiValidate {
    // 加入签名中的秘钥
    private $salt = 'G#rl;*49-T?%v,.';

    /**
     * 获取签名sign
     * [getSign description]
     * @param  [type] $data [description]
     * @return [type]       [description]
     */
    private function getSign($data)
    {
        ksort($data);
        $param = http_build_query($data);
        return hash_hmac('sha256', $param, $this->salt);
    }

    /**
     * 获取用户信息返回给服务端
     * [getUserInfo description]
     * @return [type] [description]
     */
    public function getUserInfo()
    {
        $data = [
            'name' => '张三',
            'age' => 18,
            'sex' => '男',
            'time' => time()
        ];
        $sign = $this->getSign($data);
        $data['sign'] = $sign;
        return $data;
    }

    /**
     * 验证签名
     * [validateSign description]
     * @param  [type] $data [description]
     * @return [type]       [description]
     */
    public function validateSign($data)
    {
        if (empty($data['sign'])) {
            return '请发送数据签名';
        }
        if (empty($data['time'])) {
            return '请求参数有误';
        }
        // 验证时间是否过期 
        if (time() > $data['time']+300) {
            return '签名时间已过期';
        }
        // 验证签名是否正确
        $apiSign = $data['sign'];
        unset($data['sign']);
        $sign = $this->getSign($data);
        if ($sign !== $apiSign) {
            return '签名验证失败';
        }
        return '验证成功';
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值