一个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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP防CC攻击实现代码
Dec 29 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
培养自己的php编码规范
Sep 28 PHP
yii去掉必填项中星号的方法
Dec 28 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
laravel5.6中的外键约束示例
Oct 23 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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
Smarty局部缓存的几种方法简介
2014/06/17 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
JavaScript表单验证实现代码
2017/05/22 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
Python正则表达式的使用范例详解
2014/08/08 Python
Python3实现生成随机密码的方法
2014/08/23 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
女大学生个人求职信
2013/12/09 职场文书
师范生求职自荐信
2014/06/14 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
客房领班岗位职责
2015/02/11 职场文书
党员个人年度总结
2015/02/14 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
React四级菜单的实现
2022/04/08 Javascript