一個(gè)PHP針對(duì)數(shù)字的加密解密類
來源:易賢網(wǎng) 閱讀:3397 次 日期:2014-08-22 09:57:47
溫馨提示:易賢網(wǎng)小編為您整理了“一個(gè)PHP針對(duì)數(shù)字的加密解密類”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了一個(gè)PHP針對(duì)數(shù)字的加密解密類,該類僅支持加密數(shù)字。比較適用于數(shù)據(jù)庫中id字段的加密解密,以及根據(jù)數(shù)字顯示url的加密,需要的朋友可以參考下

代碼如下:

<?php

/**

* 加密解密類

* 該算法僅支持加密數(shù)字。比較適用于數(shù)據(jù)庫中id字段的加密解密,以及根據(jù)數(shù)字顯示url的加密。

* @author 深秋的竹子

* @version alpha

* @加密原則 標(biāo)記長(zhǎng)度 + 補(bǔ)位 + 數(shù)字替換

* @加密步驟:

* 將a-z,A-Z,0-9 62個(gè)字符打亂,取前M(數(shù)字最大的位數(shù))位作為 標(biāo)記長(zhǎng)度字符串,取第M+1 到第M+10位為數(shù)字替換字符串,剩余的為補(bǔ)位字符串

* 1.計(jì)算數(shù)字長(zhǎng)度n,取亂碼的第n位作為標(biāo)記長(zhǎng)度。

* 2.計(jì)算補(bǔ)位的長(zhǎng)度,加密串的長(zhǎng)度N -1 - n 為補(bǔ)位的長(zhǎng)度。根據(jù)指定的算法得到補(bǔ)位字符串。

* 3.根據(jù)數(shù)字替換字符串替換數(shù)字,得到數(shù)字加密字符串。

* 標(biāo)記長(zhǎng)度字符 + 補(bǔ)位字符串 + 數(shù)字加密字符串 = 加密串

* 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);

//密文第一位標(biāo)記數(shù)字的長(zhǎng)度

$begin = substr($this->codelen,$numslen - 1,1);

//密文的擴(kuò)展位

$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/>";

}

?>

運(yùn)行示例結(jié)果:

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

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:一個(gè)PHP針對(duì)數(shù)字的加密解密類
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)