jmChajian.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <?php
  2. /**
  3. 加密解密插件
  4. */
  5. class jmChajian extends Chajian{
  6. private $keystr = 'abcdefghijklmnopqrstuvwxyz';
  7. private $jmsstr = '';
  8. public $rocktokenarr = array();
  9. protected function initChajian()
  10. {
  11. $this->initJm();
  12. }
  13. public function initJm()
  14. {
  15. $this->jmsstr = getconfig('randkey');
  16. $this->setRandkey($this->jmsstr);
  17. $this->getkeyshow();
  18. }
  19. public function setRandkey($str)
  20. {
  21. $this->jmsstr = $str;
  22. if(strlen($this->jmsstr)!=26)$this->jmsstr = $this->keystr;
  23. $this->getrocktoken();
  24. }
  25. public function getRandkey()
  26. {
  27. $str = $this->keystr;
  28. $s = '';$len = strlen($str);
  29. $j = $len-1;
  30. for($i=0; $i<$len; $i++){
  31. $r = rand(0, $j);
  32. $zm= substr($str, $r, 1);
  33. $s.= $zm;
  34. $str = str_replace($zm,'',$str);
  35. $j--;
  36. }
  37. return $s;
  38. }
  39. public function getint($str)
  40. {
  41. $len = strlen($str);
  42. $oi = 0;
  43. for($i=0; $i<$len; $i++){
  44. $l = substr($str,$i,1);
  45. $j = ord($l)-90;
  46. $oi+=$j;
  47. }
  48. if($oi<0)$oi=0-$oi;
  49. return $oi;
  50. }
  51. private function getrandstr($oi, $str='')
  52. {
  53. if($str=='')$str=$this->keystr;
  54. if($oi>100)$oi=100;
  55. $len = strlen($str);
  56. $qs = 6;
  57. $s1 = substr($str, 0, $qs);
  58. $s2 = substr($str, $qs, $qs);
  59. $s3 = substr($str, $qs*2, $len-$qs*2);
  60. $s = $s3.$s2.$s1;
  61. if($oi>0)$s=$this->getrandstr($oi-1, $s);
  62. return $s;
  63. }
  64. public function getkeyshow()
  65. {
  66. $str = '~!@#$%^&*()_+{}[];"<>?:-=.';
  67. $len = strlen($this->jmsstr);
  68. $s = '';
  69. for($i=0;$i<$len;$i++){
  70. $l = substr($this->jmsstr,$i,1);
  71. $j = ord($l)-97;
  72. $s.= substr($str,$j,1);
  73. }
  74. return $s;
  75. }
  76. public function base64encode($str)
  77. {
  78. if(isempt($str))return '';
  79. $str = base64_encode($str);
  80. $str = str_replace(array('+', '/', '='), array('!', '.', ':'), $str);
  81. return $str;
  82. }
  83. public function base64decode($str)
  84. {
  85. if(isempt($str))return '';
  86. $str = str_replace(array('!', '.', ':'), array('+', '/', '='), $str);
  87. $str = base64_decode($str);
  88. return $str;
  89. }
  90. private function _getss($lx)
  91. {
  92. $st = '';
  93. if(is_numeric($lx)&&$lx>0){
  94. $st = $this->getrandstr($lx);
  95. }else if(is_string($lx)){
  96. if(strlen($lx)==26)$st=$lx;
  97. }
  98. return $st;
  99. }
  100. public function encrypt($str, $lx='')
  101. {
  102. $st = $this->_getss($lx);
  103. $s = $this->base64encode($str);
  104. $s = $this->encrypts($s, $st);
  105. return $s;
  106. }
  107. public function uncrypt($str, $lx='')
  108. {
  109. $st = $this->_getss($lx);
  110. $s = $this->uncrypts($str, $st);
  111. $s = $this->base64decode($s);
  112. return $s;
  113. }
  114. public function encrypts($str, $a='')
  115. {
  116. if($a=='')$a = $this->jmsstr;
  117. $nstr = '';
  118. if($this->rock->isempt($str)) return $nstr;
  119. $len = strlen($str);
  120. $t = rand(1, 14);
  121. if($t == 10)$t++;
  122. for($i=0; $i<$len; $i++){
  123. $nstr.='0';
  124. $sta = substr($str,$i,1);
  125. $orstr = ''.ord($sta).'';
  126. $ile = strlen($orstr);
  127. for($j=0; $j<$ile; $j++){
  128. $oi = (int)substr($orstr,$j,1)+$t;
  129. $nstr.= substr($a,$oi,1);
  130. }
  131. }
  132. if($nstr != ''){
  133. $nstr = substr($nstr,1);
  134. $nstr.= '0'.$t.'';
  135. }
  136. return $nstr;
  137. }
  138. public function uncrypts($str, $a1='')
  139. {
  140. $nstr = '';
  141. if($this->rock->isempt($str)) return $nstr;
  142. if($a1=='')$a1 = $this->jmsstr;
  143. $a = array();
  144. for($i=0; $i<strlen($a1); $i++)$a[substr($a1, $i, 1)] = ''.$i.'';
  145. $na = explode('0', $str);
  146. $len= count($na);
  147. $r = (int)$na[$len-1];
  148. for($i=0; $i<$len-1; $i++){
  149. $st = $na[$i];
  150. $sl = strlen($st);
  151. $sa = '';
  152. for($j=0; $j<$sl; $j++){
  153. $ha = substr($st,$j,1);
  154. if(isset($a[$ha]))$ha = $a[$ha] - $r;
  155. $sa.=$ha;
  156. }
  157. $sa = (int)$sa;
  158. $nstr.=chr($sa);
  159. }
  160. return $nstr;
  161. }
  162. public function getrocktoken()
  163. {
  164. $toke = $this->rock->get('rocktoken');
  165. $str = $this->uncrypt($toke);
  166. if($toke!='' && !$this->contain($str,'&'))exit('sorry,not found!');
  167. $arr = array('m'=>'index','a'=>'default','d'=>'');
  168. if($str){
  169. $a = explode('&', $str);
  170. foreach($a as $a1){
  171. $a2 = explode('=', $a1);
  172. $arr[$a2[0]] = $a2[1];
  173. }
  174. }
  175. $this->rocktokenarr = $arr;
  176. return $arr;
  177. }
  178. public function gettoken($na, $dev='')
  179. {
  180. $s = $dev;
  181. if(isset($this->rocktokenarr[$na])){
  182. $s = $this->rocktokenarr[$na];
  183. }else{
  184. $s = $this->rock->get($na, $dev);
  185. }
  186. return $s;
  187. }
  188. public function strrocktoken($a=array())
  189. {
  190. $s = '';
  191. foreach($a as $k=>$v){
  192. $s .='&'.$k.'='.$v.'';
  193. }
  194. if($s!=''){
  195. $s = $this->encrypt(substr($s, 1));
  196. }
  197. return $s;
  198. }
  199. public function mcrypt_encrypt($str)
  200. {
  201. if(isempt($str))return '';
  202. if(!function_exists('mcrypt_encrypt'))return $str;
  203. $key = substr(md5($this->jmsstr),0,8);
  204. $getstr = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
  205. return $this->base64encode($getstr);
  206. }
  207. public function mcrypt_decrypt($str)
  208. {
  209. if(isempt($str))return '';
  210. if(!function_exists('mcrypt_decrypt'))return $str;
  211. $str = $this->base64decode($str);
  212. $key = substr(md5($this->jmsstr),0,8);
  213. $getstr = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
  214. return trim($getstr);
  215. }
  216. /**
  217. * 字符串加密处理
  218. */
  219. public function strlook($data,$key='')
  220. {
  221. if(isempt($data))return '';
  222. if($key=='')$key = md5($this->jmsstr);
  223. $x = 0;
  224. $len = strlen($data);
  225. $l = strlen($key);
  226. $char = $str = '';
  227. for ($i = 0; $i < $len; $i++){
  228. if ($x == $l) {
  229. $x = 0;
  230. }
  231. $char .= $key[$x];
  232. $x++;
  233. }
  234. for ($i = 0; $i < $len; $i++){
  235. $str .= chr(ord($data[$i]) + (ord($char[$i])) % 256);
  236. }
  237. return $this->base64encode($str);
  238. }
  239. /**
  240. * 字符串解密
  241. */
  242. public function strunlook($data,$key='')
  243. {
  244. if(isempt($data))return '';
  245. if($key=='')$key = md5($this->jmsstr);
  246. $x = 0;
  247. $data = $this->base64decode($data);
  248. $len = strlen($data);
  249. $l = strlen($key);
  250. $char = $str = '';
  251. for ($i = 0; $i < $len; $i++){
  252. if ($x == $l) {
  253. $x = 0;
  254. }
  255. $char .= substr($key, $x, 1);
  256. $x++;
  257. }
  258. for ($i = 0; $i < $len; $i++){
  259. if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))){
  260. $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
  261. }else{
  262. $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
  263. }
  264. }
  265. return $str;
  266. }
  267. }
粤ICP备19079148号