一个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简单明了函数语法)
Jun 10 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
自制PHP框架之路由与控制器
May 07 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 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 数组的指针操作实现代码
2011/02/08 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
JavaScript函数详解
2014/11/17 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python处理PHP数组文本文件实例
2014/09/18 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python字典按照value排序方法
2020/12/28 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
留学推荐信怎么写
2014/01/25 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
高中学生自我评价范文
2014/09/23 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
python使用pymysql模块操作MySQL
2021/06/16 Python
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python