用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

DES加密解密

2013-09-23 作者:程序猿style举报

[php]代码库

<?php
    class authCode {
        public $ttl;//到期时间 时间格式:20120101(年月日)
        public $key_1;//密钥1
        public $key_2;//密钥2
        public $td;
        public $ks;//密钥的长度
        public $iv;//初始向量
        public $salt;//盐值(某个特定的字符串)
        public $encode;//加密后的信息
        public $return_array = array(); // 返回带有MAC地址的字串数组 
        public $mac_addr;//mac地址
        public $filepath;//保存密文的文件路径
        public function __construct(){
            //获取物理地址
            $this->mac_addr=$this->getmac(PHP_OS);
            $this->filepath="./licence.txt";
            $this->ttl="20120619";//到期时间
            $this->salt="~!@#$";//盐值,用以提高密文的安全性
//            echo "<pre>".print_r(mcrypt_list_algorithms ())."</pre>";
//            echo "<pre>".print_r(mcrypt_list_modes())."</pre>";
        }
        /**
         * 对明文信息进行加密
         * @param $key 密钥
         */
        public function encode($key) {
            $this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
            $size=mcrypt_enc_get_iv_size($this->td);//设置初始向量的大小
            $this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//创建初始向量
            $this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密钥长度(以字节计算)
            $this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
            mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始处理
            //要保存到明文
            $con=$this->mac_addr.$this->ttl;
            //加密
            $this->encode = mcrypt_generic($this->td, $con);   
            //结束处理
            mcrypt_generic_deinit($this->td);
            //将密文保存到文件中
            $this->savetofile();
        }
        /**
         * 对密文进行解密
         * @param $key 密钥
         */
        public function decode($key) {
            try {
                if (!file_exists($this->filepath)){
                    throw new Exception("授权文件不存在");
                }else{//如果授权文件存在的话,则读取授权文件中的密文
                    $fp=fopen($this->filepath,'r');
                    $secret=fread($fp,filesize($this->filepath)); 
                    $this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks);
                    //初始解密处理
                    mcrypt_generic_init($this->td, $this->key_2, $this->iv);
                    //解密
                    $decrypted = mdecrypt_generic($this->td, $secret);
                    //解密后,可能会有后续的\0,需去掉   
                    $decrypted=trim($decrypted) . "\n";   
                    //结束
                    mcrypt_generic_deinit($this->td);   
                    mcrypt_module_close($this->td);
                    return $decrypted;        
                }
            }catch (Exception $e){
                echo $e->getMessage();
            }
        }
        /**
         * 将密文保存到文件中
         */
        public function savetofile(){
            try {
                $fp=fopen($this->filepath,'w+');
                if (!$fp){
                    throw new Exception("文件操作失败");
                }
                fwrite($fp,$this->encode);
                fclose($fp);
            }catch (Exception $e){
                echo $e->getMessage();
            }
        }
        /**
         * 取得服务器的MAC地址
         */
        public function getmac($os_type){ 
             switch ( strtolower($os_type) ){ 
                      case "linux": 
                                $this->forLinux(); 
                                break; 
                      case "solaris": 
                                break; 
                      case "unix": 
                                 break; 
                       case "aix": 
                                 break; 
                       default: 
                               $this->forWindows(); 
                               break; 
              }
              $temp_array = array(); 
              foreach( $this->return_array as $value ){
                        if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){
                            $mac_addr = $temp_array[0]; 
                            break; 
                       }
              }
              unset($temp_array); 
              return $mac_addr; 
         }
         /**
          * windows服务器下执行ipconfig命令
          */
         public function forWindows(){ 
              @exec("ipconfig /all", $this->return_array); 
              if ( $this->return_array ) 
                       return $this->return_array; 
              else{ 
                       $ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe"; 
                       if ( is_file($ipconfig) ) 
                          @exec($ipconfig." /all", $this->return_array); 
                       else 
                          @exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array); 
                       return $this->return_array; 
              }
         }
         /**
          * Linux服务器下执行ifconfig命令
          */
         public function forLinux(){ 
              @exec("ifconfig -a", $this->return_array); 
              return $this->return_array; 
         }
    }
    $code=new authCode();
    //加密
    $code->encode("~!@#$%^");
    //解密
    echo $code->decode("~!@#$%^");
?>


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。