跨平台数据传输时 数据安全加密 ,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方法试下了,
完毕,备份