一个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 Ubb代码编辑器函数代码
Jul 05 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
Yii 实现数据加密和解密
Mar 09 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脚本的10个技巧(6)
2006/10/09 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
JS继承用法实例分析
2015/02/05 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
python写入xml文件的方法
2015/05/08 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
django实现支付宝支付实例讲解
2019/10/17 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
大学生职业生涯规划书模版
2013/12/30 职场文书
学习交流会主持词
2014/04/01 职场文书
听课评语大全
2014/04/30 职场文书
土建工程师岗位职责
2014/06/10 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
pycharm代码删除恢复的方法
2021/06/26 Python