一个PHP针对数字的加密解密类
来源: 阅读:3343 次 日期:2014-08-22 09:57:47
温馨提示: 小编为您整理了“一个PHP针对数字的加密解密类”,方便广大网友查阅!

这篇文章主要介绍了一个PHP针对数字的加密解密类,该类仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密,需要的朋友可以参考下

代码如下:

<?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]

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map