| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jspet
10年前发布

DES加密解密的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("~!@#$%^");  ?>