PHP API接口签名验证,参数签名逻辑实现

数据变化过程:

1、原始数据:Array ( [name] => xubin [age] => '17 [sex] => 男 )

2、添加反斜杠:Array ( [name] => xubin [age] => \'17 [sex] => 男 )

3、排序:Array ( [age] => \'17 [name] => xubin [sex] => 男 ) 

4、拼接成字符串:age\'17Namexubinsex男

5、拼接签名key:age\'17Namexubinsex男123456

6、拼接后台全部转小写:age\'17namexubinsex男123456

7、Md5加密:64b766e4c910abf069e7da768a7876ab

8、转成大写:64B766E4C910ABF069E7DA768A7876AB

<?php
header("Content-Type: text/html; charset=utf-8");

class ClassName
{
    private $KEY = '123456';

    /**
     * ksort — 对数组按照键名排序
     * stripslashes — 反引用一个引用字符串
     * json_decode — 对 JSON 格式的字符串进行解码
     * strtoupper — 将字符串转化为大写
     * @param $param
     * @param string $signKey
     * @return string
     */
    function buildSign($param, $signKey = '')
    {
        $signKey = !empty($signKey) ? $signKey : $this->KEY;
        $param   = $this->_addslashes($param);

        ksort($param);

        $str = '';
        foreach ($param as $key => $val) {
            $a = stripslashes($val);

            $var = json_decode($a, true);
            if (!is_array($var)) {
                $str .= $key . $val;
            }
        }
        $tmpStr = strtoupper(md5(strtolower($str . $signKey)));
        return $tmpStr;
    }


    /**
     * 递归调用
     * addslashes — 使用反斜线引用字符串
     * get_magic_quotes_gpc — 获取当前 magic_quotes_gpc 的配置选项设置
     * @param $svar
     * @return array|string
     */
    function _addslashes(&$svar)
    {
        if (!get_magic_quotes_gpc()) {

            if (is_array($svar)) {
                foreach ($svar as $_k => $_v) {
                    $svar[$_k] = $this->_addslashes($_v);
                }
            } else {
                $svar = addslashes($svar);
            }
        }
        return $svar;
    }

}

$arr = [
    'Name' => 'xubin',
    'age'  => "'17",
    'sex'  => '男'
];

$bui = new ClassName();
$data = $bui->buildSign($arr);

print_r($data);

?>

使用:传输方跟接收方同时使用签名key对数据进行签名对比结果可判定数据是否有篡改情况。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值