一个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 include,include_once,require,require_once
Sep 05 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
php cookie 详解使用实例
Nov 03 PHP
golang 调用 php7详解及实例
Jan 04 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
Laravel-admin之修改操作日志的方法
Sep 30 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
laravel学习教程之关联模型
2016/07/30 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
详解anaconda安装步骤
2020/11/23 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
村党支部公开承诺书
2014/05/29 职场文书
土木工程求职信
2014/05/29 职场文书
水利水电专业自荐信
2014/07/08 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
暑期工社会实践报告
2015/07/13 职场文书
小学运动会入场口号
2015/12/24 职场文书
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL