PHP语言, API接口设计数据安全,通过 hash_hmac对数据进行加解密,

跨平台数据传输时 数据安全加密 ,PHP语言, 使用的是hash_hmac加密

在Env配置文件里 配合一个干扰$key, 仅保存在本地。

上源码:


    private function getSecuKey(){
        $siteflag  = $this->request->header('siteflag',false);
        $secukey=false;
        if($siteflag){
            $key='site.'.$siteflag;
            $secukey = Env::get($key);
        }
        if($secukey && $secukey!=''){}else{
          $this->error('NoRight');
        }
        return $secukey;
    }

    //发送前 数据处理 加密
    private function hmacsign($arr){
        $json=json_encode($arr,JSON_UNESCAPED_UNICODE);
        $base64=base64_encode($json);
        $base64_r= strrev($base64);//倒序
        $base64_r = str_replace(['='],['--'],$base64_r);
        $chang=mt_rand(1,9);
        $base64_r = mt_rand(111,999).$chang.substr(str_shuffle('z-a-q-w-s-x-c-d-e-r-f-v-b-g-t-y-h-n-m-j-u-k-i-l-o-p-'),0,$chang).$base64_r;
        $secukey="mkoi54345jk03r34kr23erk20239";
        $sign = hash_hmac('sha256',$base64_r,$secukey);
        $r=['data'=>$base64_r,'sign'=>$sign];
        return $r;
    }

    //接受到数据后, 验证并解密
    private function dedatasign($arr){
        $data=$arr['data'];
        $sign = $arr['sign'];
        $secukey="mkoi54345jk03r34kr23erk20239";
        $cal_sign = hash_hmac('sha256',$data,$secukey);
        if($cal_sign != $sign){
            return 'sign error';
        }
        $chang=substr($data,3,1);
        $datav=substr($data,4+$chang);
        $datav = str_replace(['--'],['='],$datav);
        $datav = strrev($datav);
        $jsonstr = base64_decode($datav);
        $rarr = json_decode($jsonstr,1);
        return $rarr;
    }

    //测试调用
    public function test()
    {
        $arr=['a'=>100,'b'=>200,'c'=>2342,'wqe'=>'非常不错的一个传送']; //传送数据
        $send = $this->hmacsign($arr); //加密签名后 传送

        $rarr   = $this->dedatasign($send); //接受到 验签,解密

        $d =['o'=>$arr,'s'=>$send,'r'=>$rarr];

        $this->success('返回成功', $d);
    }

把以上代码放在一个控制器或模型 或自定义的一个类里。 就可以尝试访问test方法试下了, 

完毕,备份

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世界方块

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值