• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

一个PHP针对数字的加密解密类_php实例

php 搞代码 4年前 (2022-01-25) 19次浏览 已收录 0个评论
</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]


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个PHP针对数字的加密解密类_php实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址