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


Posted in PHP onMarch 20, 2014
<?php
/**
 * 加密解密类
 * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
 * @author 深秋的竹子
 * @version alpha
 * @加密原则 标记长度 + 补位 + 数字替换
 * @加密步骤:
 * 将a-z,A-Z,0-9 62个字符打乱,取前M(数字最大的位数)位作为 标记长度字符串,取第M+1 到第M+10位为数字替换字符串,剩余的为补位字符串
 * 1.计算数字长度n,取乱码的第n位作为标记长度。
 * 2.计算补位的长度,加密串的长度N -1 - n 为补位的长度。根据指定的算法得到补位字符串。
 * 3.根据数字替换字符串替换数字,得到数字加密字符串。
 * 标记长度字符 + 补位字符串 + 数字加密字符串 = 加密串
 * Usage:
 *   $obj = new XDeode(9);
 *   $e_txt = $obj->encode(123);
 *   echo $e_txt.'<br/>';
 *   echo $key->decode($e_txt);
 */
class XDeode{
  private $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";
  private $key,$length,$codelen,$codenums,$codeext;
  function __construct($length = 9,$key = 2543.5415412812){
    $this->key = $key;
    $this->length = $length;
    $this->codelen = substr($this->strbase,0,$this->length);
    $this->codenums = substr($this->strbase,$this->length,10);
    $this->codeext = substr($this->strbase,$this->length + 10);
  }
 
  function encode($nums){
    $rtn = "";
    $numslen = strlen($nums);
    //密文第一位标记数字的长度
    $begin = substr($this->codelen,$numslen - 1,1);
    //密文的扩展位
    $extlen = $this->length - $numslen - 1;
    $temp = str_replace('.', '', $nums / $this->key);
    $temp = substr($temp,-$extlen);
    $arrextTemp = str_split($this->codeext);
    $arrext = str_split($temp);
    foreach ($arrext as $v) {
      $rtn .= $arrextTemp[$v];
    }
    $arrnumsTemp = str_split($this->codenums);
    $arrnums = str_split($nums);
    foreach ($arrnums as $v) {
      $rtn .= $arrnumsTemp[$v];
    }
    return $begin.$rtn;
  }

  function decode($code){
    $begin = substr($code,0,1);
    $rtn = '';
    $len = strpos($this->codelen,$begin);
    if($len!== false){
      $len++;
      $arrnums = str_split(substr($code,-$len));
      foreach ($arrnums as $v) {
        $rtn .= strpos($this->codenums,$v);
      }
    }
    return $rtn;
  }
}
/**** 示例  ****/
$begin = 9950;
$end = $begin + 50;
$obj = new XDeode(9);
for($i=$begin;$i<$end;$i++){
  $en = $obj->encode($i);
  $de = $obj->decode($en);
  echoln("[{$i}]=[{$en}]=[{$de}]");
}
function echoln($str){
  echo "{$str}<br/>";
}
?>

运行示例结果:

[9950]=[vmizxPPga]=[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]

PHP 相关文章推荐
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP实现微信提现功能
Sep 30 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 #PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 #PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 #PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 #PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 #PHP
php实现保存submit内容之后禁止刷新
Mar 19 #PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 #PHP
You might like
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php修改数组键名的方法示例
2017/04/15 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
js转html实体的方法
2016/09/27 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python处理document文档保留原样式
2019/09/23 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
银行存款证明样本
2014/01/17 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
python神经网络Xception模型
2022/05/06 Python