</P><P><?php<BR>/**<BR> * 加密解密类<BR> * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。<BR> * @author 深秋的竹子<BR> * @version alpha<BR> * @加密原则 标记长度 + 补位 + 数字替换<BR> * @加密步骤:<BR> * 将a-z,A-Z,0-9 62个字符打乱,取前M(数字最大的位数)位作为 标记长度字符串,取第M+1 到第M+10位为数字替换字符串,剩余的为补位字符串<BR> * 1.计算数字长度n,取乱码的第n位作为标记长度。<BR> * 2.计算补位的长度,加密串的长度N -1 - n 为补位的长度。根据指定的算法得到补位字符串。<BR> * 3.根据数字替换字符串替换数字,得到数字加密字符串。<BR> * 标记长度字符 + 补位字符串 + 数字加密字符串 = 加密串<BR> * Usage:<BR> * $obj = new XDeode(9);<BR> * $e_txt = $obj->encode(123);<BR> * echo $e_txt.'<br />';<BR> * echo $key->decode($e_txt);<BR> */</P><P>class XDeode{<BR> private $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";<BR> private $key,$length,$codelen,$codenums,$codeext;<BR> function __construct($length = 9,$key = 2543.5415412812){<BR> $this->key = $key;<BR> $this->length = $length;<BR> $this->codelen = substr($this->strbase,0,$this->length);<BR> $this->codenums = substr($this->strbase,$this->length,10);<BR> $this->codeext = substr($this->strbase,$this->length + 10);<BR> }</P><P> <BR> function encode($nums){<BR> $rtn = "";<BR> $numslen = strlen($nums);<BR> //密文第一位标记数字的长度<BR> $begin = substr($this->codelen,$numslen - 1,1);</P><P> //密文的扩展位<BR> $extlen = $this->length - $numslen - 1;<BR> $temp = str_replace('.', '', $nums / $this->key);<BR> $temp = substr($temp,-$extlen);</P><P> $arrextTemp = str_split($this->codeext);<BR> $arrext = str_split($temp);<BR> foreach ($arrext as $v) {<BR> $rtn .= $arrextTemp[$v];<BR> }</P><P> $arrnumsTemp = str_split($this->codenums);<BR> $arrnums = str_split($nums);<BR> foreach ($arrnums as $v) {<BR> $rtn .= $arrnumsTemp[$v];<BR> }<BR> return $begin.$rtn;<BR> }</P><P><BR> function decode($code){</P><P> $begin = substr($code,0,1);<BR> $rtn = '';<BR> $len = strpos($this->codelen,$begin);<BR> if($len!== false){<BR> $len++;<BR> $arrnums = str_split(substr($code,-$len));<BR> foreach ($arrnums as $v) {<BR> $rtn .= strpos($this->codenums,$v);<BR> }<BR> }<br><br> return $rtn;<BR> }<BR>}</P><P>/**** 示例 ****/<BR>$begin = 9950;<BR>$end = $begin + 50;<BR>$obj = new XDeode(9);<BR>for($i=$begin;$i<$end;$i++){<BR> $en = $obj->encode($i);<BR> $de = $obj->decode($en);<BR> echoln("[{$i}]=[{$en}]=[{$de}]");<BR>}</P><P>function echoln($str){<BR> echo "{$str}<br />";<BR>}<BR>?>
运行示例结果:
[9950]=[vmizxPPga]=
……本2文来源gaodai.ma#com搞##代!^码@网3
搞代gaodaima码
[9950]
[9951]=[vSNSSPPgk]=[9951]
[9952]=[vNQNyPPgV]=[9952]
[9953]=[vyyJJPPgj]=[9953]
[9954]=[vNzQzPPgq]=[9954]
[9955]=[vyNzmPPgg]=[9955]
[9956]=[vXxSNPPge]=[9956]
[9957]=[vXJJJPPgW]=[9957]
[9958]=[vXziQPPgU]=[9958]
[9959]=[viXxSPPgP]=[9959]
[9960]=[vQxmyPPea]=[9960]
[9961]=[viJyJPPek]=[9961]