一个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作为Shell脚本语言使用
Oct 09 PHP
phpfans留言版用到的install.php
Jan 04 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
php header功能的使用
Oct 28 PHP
PHP闭包实例解析
Sep 08 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 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使之能同时支持GIF和JPEG
2006/10/09 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
清除输入框内的空格
2016/12/21 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python的faker库用法
2019/11/28 Python
Python reduce函数作用及实例解析
2020/05/08 Python
巴基斯坦购物网站:Goto
2019/03/11 全球购物
工地安全检查制度
2014/02/04 职场文书
结婚司仪主持词
2015/06/29 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
python内置进制转换函数的操作
2021/06/02 Python
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技