一个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一些服务器端特性的配置加强php的安全
Oct 09 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP整合PayPal支付
Jun 11 PHP
php分享朋友圈的实现代码
Feb 18 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 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 三维饼图的实现代码
2008/09/28 PHP
phpinfo 系统查看参数函数代码
2009/06/05 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Django实现celery定时任务过程解析
2020/04/21 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
保安员岗位职责
2013/11/17 职场文书
死亡诗社观后感
2015/06/05 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书