/**
* 暗号化および復号化クラス
* このアルゴリズムは、暗号化された数値のみをサポートします。データベースの ID フィールドの暗号化と復号化、および数値に基づいて表示される URL の暗号化に適しています。
* @author Late Autumn Bamboo
* @version alpha
* @暗号化原則のマークの長さ + パディング + 数値置換
* @暗号化の手順:
* 62 文字 a-z、A-Z、0-9 をスクランブルし、最初の M を取得します (数値の最大桁数) をマーク長文字列として使用し、M+1 桁から M+10 桁までをデジタル置換文字列として、残りを補数文字列とします
* 1. 数値の長さ n を計算し、 n 番目のビットはマーク長として使用されます。
* 2. 補数の長さを計算します。暗号化された文字列 N -1 - n の長さが補数の長さになります。指定されたアルゴリズムに従って補文字列を取得します。
* 3. 数値置換文字列に従って数値を置換し、デジタル暗号化された文字列を取得します。
* マーク長文字 + パディング文字列 + デジタル暗号化文字列 = 暗号化文字列
* 使用法:
* $obj = new XDeode(9);
* $e_txt = $obj->encode(123);
* echo $e_txt .'
';
* echo $key->decode($e_txt);
*/
クラス 3.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 ->長さ + 10);
}
function encode($nums){
$numslen = strlen($nums);
//暗号文の最初にマークされた番号の長さ
$begin = substr($this->コードレン ,$numslen - 1,1);
//暗号文の拡張ビット
$extlen = $this->length - $numslen - 1;
$ temp = substr($temp,-$extlen);
$arrextTemp = str_split($this->codeext);
$arrext = str_split($temp);
$rtn .= $arrextTemp[$v];
}
$arrnumsTemp = str_split($this->codenums);
$arrnums = str_split($nums);
$rtn .= $arrnumsTemp[$v];
}
return $begin.$rtn;
}
関数デコード($code){
$begin = substr($code,0,1);
$rtn = '';
if($len!== false){
$len++;
$arrnums = str_split(substr($code,-$len));
foreach ($arrnums as $v) {
$rtn .= strpos($this->codenums,$v);
}
}
$rtn;
}
}
を返します
/**** 例 ****/
$begin = 9950;
$obj = new XDeode(9);
for($i=$begin;$i<$end;$ i++){
$en = $obj->encode($i);
$de = $obj->decode($en);
echoln("[{$i}]=[{$en}] =[{$de}]");
}
関数 echoln($str){
echo "{$str}
";
?>
例の実行結果:
[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]