<?php
/**
* Created by PhpStorm.
* User: andy
* Date: 2018/4/3
* Time: 14:17
*/
namespace Common\Model\DataModel;
class CheckTokenModel
{
private $key='sdksjfkdsgshhbdbvdjvbdvvoisjvnvohsvsnj';//密钥
private $time=300;//token过期秒数
/**
* @desc 创建token
*/
public function creatToken($type) {
list($usec, $sec) = explode(" ", microtime());
$time=((float)$usec + (float)$sec);
$str = md5(session_id().$time*1000000).time();//生成token的原始字符串
$key = md5($this->key);//密钥
$code=$this->encrypt($str, 'E', $key);
session('TOKEN', $code);
return session('TOKEN');
}
/**
* @desc 校验token
*/
public function checkToken($token,$type_token='') {
if(empty($token))
return FALSE;
//校验token是否已经过期
$originalToken=$this->encrypt($token, 'D', md5($this->key));
$originalTimestamps=substr($originalToken,32);
if($originalTimestamps+$this->time<time())
E('110103');
if ($token == session('TOKEN')) {
session('TOKEN',null);
return TRUE;
} else {
return FALSE;
}
}
/**
* @desc 加密/加密 (E/D)
*/
function encrypt($string,$operation,$key=''){
$key=md5($key);
$key_length=strlen($key);
$string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;
$string_length=strlen($string);
$rndkey=$box=array();
$result='';
for($i=0;$i<=255;$i++){
$rndkey[$i]=ord($key[$i%$key_length]);
$box[$i]=$i;
}
for($j=$i=0;$i<256;$i++){
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}
for($a=$j=$i=0;$i<$string_length;$i++){
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}
if($operation=='D'){
if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){
return substr($result,8);
}else{
return'';
}
}else{
return str_replace('=','',base64_encode($result));
}
}
}