zoukankan      html  css  js  c++  java
  • 前端 提交加密token 防止有心人刷

    <?php
    /**
     * Created by PhpStorm.
     * User: andy
     * Date: 2018/4/3
     * Time: 14:17
     */
    namespace CommonModelDataModel;
    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));
            }
        }
    }
  • 相关阅读:
    Error 1031
    电信短信转移取消
    手机模拟手柄操作电脑游戏
    MySQL 5.7 InnoDB Cluster 部署
    Bitwarden_rs搭建
    脚本:Tomcat日志切割
    报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
    Linux启动过程详解
    UNIX环境高级编程__针对apue.h找不到的情况以及log错误信息输出的问题
    C++primer_拷贝控制之13.26联系控制成员实现类值行为
  • 原文地址:https://www.cnblogs.com/fyandy/p/8722643.html
Copyright © 2011-2022 走看看