一个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中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
深入理解php的MySQL连接类
Jun 07 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
Laravel中的Auth模块详解
Aug 17 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
laravel-admin 中列表筛选方法
Oct 03 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
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
javascript 回调函数详解
2014/11/11 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
js实现各浏览器全屏代码实例
2018/07/03 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
思想专业自荐信范文
2013/12/25 职场文书
会计岗位职责模板
2014/03/12 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2016寒假假期总结
2015/10/10 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android