一个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 相关文章推荐
MySql中正则表达式的使用方法描述
Jul 30 PHP
PHP缓存技术的使用说明
Aug 06 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
PHP-redis中文文档介绍
Feb 07 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
PHP使用ob_start生成html页面的方法
Nov 07 PHP
php数组冒泡排序算法实例
May 06 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 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 一个比较完善的简单文件上传
2010/03/25 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
ext监听事件方法[初级篇]
2008/04/27 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js 小数取整的函数
2010/05/10 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
Python入门篇之文件
2014/10/20 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
python实现邮件发送功能
2019/08/10 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
电子邮箱格式怎么写
2014/01/12 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
小学课外阅读总结
2014/07/09 职场文书
大学生党性分析材料
2014/12/19 职场文书
单位工作证明范本
2015/06/15 职场文书
爱护环境建议书
2015/09/14 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
浅析Python中的随机采样和概率分布
2021/12/06 Python
nginx配置限速限流基于内置模块
2022/05/02 Servers