| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <?php
- /**
- 加密解密插件
- */
- class jmChajian extends Chajian{
-
- private $keystr = 'abcdefghijklmnopqrstuvwxyz';
- private $jmsstr = '';
- public $rocktokenarr = array();
- protected function initChajian()
- {
- $this->initJm();
- }
-
- public function initJm()
- {
- $this->jmsstr = getconfig('randkey');
- $this->setRandkey($this->jmsstr);
- $this->getkeyshow();
- }
-
- public function setRandkey($str)
- {
- $this->jmsstr = $str;
- if(strlen($this->jmsstr)!=26)$this->jmsstr = $this->keystr;
- $this->getrocktoken();
- }
-
- public function getRandkey()
- {
- $str = $this->keystr;
- $s = '';$len = strlen($str);
- $j = $len-1;
- for($i=0; $i<$len; $i++){
- $r = rand(0, $j);
- $zm= substr($str, $r, 1);
- $s.= $zm;
- $str = str_replace($zm,'',$str);
- $j--;
- }
- return $s;
- }
-
- public function getint($str)
- {
- $len = strlen($str);
- $oi = 0;
- for($i=0; $i<$len; $i++){
- $l = substr($str,$i,1);
- $j = ord($l)-90;
- $oi+=$j;
- }
- if($oi<0)$oi=0-$oi;
- return $oi;
- }
-
- private function getrandstr($oi, $str='')
- {
- if($str=='')$str=$this->keystr;
- if($oi>100)$oi=100;
- $len = strlen($str);
- $qs = 6;
- $s1 = substr($str, 0, $qs);
- $s2 = substr($str, $qs, $qs);
- $s3 = substr($str, $qs*2, $len-$qs*2);
- $s = $s3.$s2.$s1;
- if($oi>0)$s=$this->getrandstr($oi-1, $s);
- return $s;
- }
-
- public function getkeyshow()
- {
- $str = '~!@#$%^&*()_+{}[];"<>?:-=.';
- $len = strlen($this->jmsstr);
- $s = '';
- for($i=0;$i<$len;$i++){
- $l = substr($this->jmsstr,$i,1);
- $j = ord($l)-97;
- $s.= substr($str,$j,1);
- }
- return $s;
- }
- public function base64encode($str)
- {
- if(isempt($str))return '';
- $str = base64_encode($str);
- $str = str_replace(array('+', '/', '='), array('!', '.', ':'), $str);
- return $str;
- }
-
- public function base64decode($str)
- {
- if(isempt($str))return '';
- $str = str_replace(array('!', '.', ':'), array('+', '/', '='), $str);
- $str = base64_decode($str);
- return $str;
- }
-
- private function _getss($lx)
- {
- $st = '';
- if(is_numeric($lx)&&$lx>0){
- $st = $this->getrandstr($lx);
- }else if(is_string($lx)){
- if(strlen($lx)==26)$st=$lx;
- }
- return $st;
- }
-
- public function encrypt($str, $lx='')
- {
- $st = $this->_getss($lx);
- $s = $this->base64encode($str);
- $s = $this->encrypts($s, $st);
- return $s;
- }
- public function uncrypt($str, $lx='')
- {
- $st = $this->_getss($lx);
- $s = $this->uncrypts($str, $st);
- $s = $this->base64decode($s);
- return $s;
- }
-
- public function encrypts($str, $a='')
- {
- if($a=='')$a = $this->jmsstr;
- $nstr = '';
- if($this->rock->isempt($str)) return $nstr;
- $len = strlen($str);
- $t = rand(1, 14);
- if($t == 10)$t++;
- for($i=0; $i<$len; $i++){
- $nstr.='0';
- $sta = substr($str,$i,1);
- $orstr = ''.ord($sta).'';
- $ile = strlen($orstr);
- for($j=0; $j<$ile; $j++){
- $oi = (int)substr($orstr,$j,1)+$t;
- $nstr.= substr($a,$oi,1);
- }
- }
- if($nstr != ''){
- $nstr = substr($nstr,1);
- $nstr.= '0'.$t.'';
- }
- return $nstr;
- }
-
- public function uncrypts($str, $a1='')
- {
- $nstr = '';
- if($this->rock->isempt($str)) return $nstr;
- if($a1=='')$a1 = $this->jmsstr;
- $a = array();
- for($i=0; $i<strlen($a1); $i++)$a[substr($a1, $i, 1)] = ''.$i.'';
- $na = explode('0', $str);
- $len= count($na);
- $r = (int)$na[$len-1];
- for($i=0; $i<$len-1; $i++){
- $st = $na[$i];
- $sl = strlen($st);
- $sa = '';
- for($j=0; $j<$sl; $j++){
- $ha = substr($st,$j,1);
- if(isset($a[$ha]))$ha = $a[$ha] - $r;
- $sa.=$ha;
- }
- $sa = (int)$sa;
- $nstr.=chr($sa);
- }
- return $nstr;
- }
-
-
- public function getrocktoken()
- {
- $toke = $this->rock->get('rocktoken');
- $str = $this->uncrypt($toke);
- if($toke!='' && !$this->contain($str,'&'))exit('sorry,not found!');
- $arr = array('m'=>'index','a'=>'default','d'=>'');
- if($str){
- $a = explode('&', $str);
- foreach($a as $a1){
- $a2 = explode('=', $a1);
- $arr[$a2[0]] = $a2[1];
- }
- }
- $this->rocktokenarr = $arr;
- return $arr;
- }
-
- public function gettoken($na, $dev='')
- {
- $s = $dev;
- if(isset($this->rocktokenarr[$na])){
- $s = $this->rocktokenarr[$na];
- }else{
- $s = $this->rock->get($na, $dev);
- }
- return $s;
- }
-
- public function strrocktoken($a=array())
- {
- $s = '';
- foreach($a as $k=>$v){
- $s .='&'.$k.'='.$v.'';
- }
- if($s!=''){
- $s = $this->encrypt(substr($s, 1));
- }
- return $s;
- }
-
- public function mcrypt_encrypt($str)
- {
- if(isempt($str))return '';
- if(!function_exists('mcrypt_encrypt'))return $str;
- $key = substr(md5($this->jmsstr),0,8);
- $getstr = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
- return $this->base64encode($getstr);
- }
-
- public function mcrypt_decrypt($str)
- {
- if(isempt($str))return '';
- if(!function_exists('mcrypt_decrypt'))return $str;
- $str = $this->base64decode($str);
- $key = substr(md5($this->jmsstr),0,8);
- $getstr = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
- return trim($getstr);
- }
-
- /**
- * 字符串加密处理
- */
- public function strlook($data,$key='')
- {
- if(isempt($data))return '';
- if($key=='')$key = md5($this->jmsstr);
- $x = 0;
- $len = strlen($data);
- $l = strlen($key);
- $char = $str = '';
- for ($i = 0; $i < $len; $i++){
- if ($x == $l) {
- $x = 0;
- }
- $char .= $key[$x];
- $x++;
- }
- for ($i = 0; $i < $len; $i++){
- $str .= chr(ord($data[$i]) + (ord($char[$i])) % 256);
- }
- return $this->base64encode($str);
- }
-
- /**
- * 字符串解密
- */
- public function strunlook($data,$key='')
- {
- if(isempt($data))return '';
- if($key=='')$key = md5($this->jmsstr);
- $x = 0;
- $data = $this->base64decode($data);
- $len = strlen($data);
- $l = strlen($key);
- $char = $str = '';
- for ($i = 0; $i < $len; $i++){
- if ($x == $l) {
- $x = 0;
- }
- $char .= substr($key, $x, 1);
- $x++;
- }
- for ($i = 0; $i < $len; $i++){
- if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))){
- $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
- }else{
- $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
- }
- }
- return $str;
- }
- }
|