<?php
 /**
  * 加密解密类,PHP加密解密数字,适用于URL加密
  * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
  * @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;
     }
 }

 $obj = new XDeode(10);
 echo $obj->encode(1)."<br/>";
 echo $obj->encode(2)."<br/>";
 echo $obj->encode(3)."<br/>";
 echo $obj->encode(4)."<br/>";
 echo $obj->encode(5)."<br/>";
 echo $obj->encode(6)."<br/>";
 echo $obj->encode(7)."<br/>";
 echo $obj->encode(8)."<br/>";
 echo $obj->encode(9)."<br/>";
 echo $obj->encode(10)."<br/>";
 echo $obj->encode(45762454)."<br/>";
 echo $obj->encode(1023213123)."<br/>";
 echo $obj->encode(134320)."<br/>";
 echo '<hr/>';

 echo $obj->decode('FzxxmyQzxV')."<br/>";
 echo $obj->decode('FSSyJzxSSj')."<br/>";
 echo $obj->decode('FmNyixHxNq')."<br/>";
 echo $obj->decode('FQJJzHSSJg')."<br/>";
 echo $obj->decode('FzyQiNziye')."<br/>";
 echo $obj->decode('FizmQyNyzW')."<br/>";
 echo $obj->decode('FNSNSxxJyU')."<br/>";
 echo $obj->decode('FQNHyNJJHP')."<br/>";
 echo $obj->decode('FyiQiimiiX')."<br/>";
 echo $obj->decode('lxxmyQzxVk')."<br/>";
 echo $obj->decode('CSgeUWjgeg')."<br/>";
 echo $obj->decode('aQSSmNHxxzzJJNVkjqjVqVjq')."<br/>";
 echo $obj->decode('7ziiVqgqjk')."<br/>";

 //FzxxmyQzxV
 //FSSyJzxSSj
 //FmNyixHxNq
 //FQJJzHSSJg
 //FzyQiNziye
 //FizmQyNyzW
 //FNSNSxxJyU
 //FQNHyNJJHP
 //FyiQiimiiX
 //lxxmyQzxVk
 //CSgeUWjgeg
 //aQSSmNHxxzzJJNVkjqjVqVjq
 //7ziiVqgqjk
 //1
 //2
 //3
 //4
 //5
 //6
 //7
 //8
 //9
 //10
 //45762454
 //1023213123
 //134320

PHP加密解密数字的更多相关文章

  1. PHP加密解密数字,适用于URL加密。

    本博主最近正在建设一个9元包邮的网站,希望各位光临指导一些意见: 9元包邮 http://www.jiubaou.com/ <?php /** * 加密解密类 * 该算法仅支持加密数字.比较适用 ...

  2. Java加密解密与数字证书的操作

    1 keytool命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(文件夹是c: Documents and Settingusername)和算法(DSA) keytool  ...

  3. PHP针对数字的加密解密类,可直接使用

    <?phpnamespace app;/** * 加密解密类 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @author 深秋的竹子 *  ...

  4. java纯数字加密解密实例

    我们都知道,在用户加入信息时,一些比較敏感的信息,如身份证号,手机号,用户的登录password等信息,是不能直接明文存进数据库的.今天我们就以一个详细的样例来说明一下纯数字的java加密解密技术. ...

  5. 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

    一.  使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:“Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字节占满,实 ...

  6. 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据

    一.  使用RSA证书加.解密敏感数据 X.509证书标准支持三种不对称加密算法:RSA, DSA, Diffie-Hellman algorithms.最常用的是RSA算法.所以本文就以前面章节使用 ...

  7. openssl evp RSA 加密解密

    openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...

  8. .NET/android/java/iOS AES通用加密解密(修正安卓)

    移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...

  9. java加密解密的学习

    注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...

随机推荐

  1. java泛型探索——小特性

    泛型特性(小篇幅) 1. 补充介绍一些常见的泛型特性: 类型参数T可以是recursive(类似递归性),它的边界可以是类型参数是自身的接口或类. 如我实现寻找最大值的方法,可以这么写: public ...

  2. poj1743 Musical Theme 后缀数组的应用(求最长不重叠重复子串)

    题目链接:http://poj.org/problem?id=1743 题目理解起来比较有困难,其实就是求最长有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1 ...

  3. VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)

    VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...

  4. php 关于经纬度距离计算方法 成功版

    1.PHP实现通过经纬度计算距离 单位为公里 function getdistance($lng1,$lat1,$lng2,$lat2)//根据经纬度计算距离 { //将角度转为狐度  $radLat ...

  5. (继承)virtual与访问控制

    之前只注意过访问控制与继承的关系,这边不多说,今天看到代码看到virtual放在private里,并且还有派生类没有override public里的virtual,此时调用时啥情况了,这边有点晕,看 ...

  6. Tomcat8-源码编译及开发

    前言 下载Tomcat8源码进行分析,最好的方式,可以编译及运行,从网上查询了很多方式,总是不能完整的运行,由于本人采用idea编辑器,所以喜欢maven的方式,所以综合了网上的多种方案,最终可以在i ...

  7. 最全DOS的CMD命令,程序员必会

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本)1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr. ...

  8. 同步文件的利器-rsync

    即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我不想失去任何这些数据. rsync是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件 ...

  9. UNIX文件I/O

    第一次用markdown语法写博客,写出来的还比较整齐,感觉博客园对序号的支持不是很好,调了一会才有了比较满意的效果,还有有哪位知道使用markdown如何插入frame? 这边博客主要说了APUE中 ...

  10. 开篇有益-解析微软微服务架构eShopOnContainers(一)

    为了推广.Net Core,微软为我们提供了一个开源Demo-eShopOnContainers,这是一个使用Net Core框架开发的,跨平台(几乎涵盖了所有平台,windows.mac.linux ...