2011-03-18 68 views
0

可能重复:
PHP array Encoding and Decoding:Need a function for encoding and decoding string or array with delimiters or array itself…如何在php中编码和解码多维数组?

喜。 我是新来的PHP。 我需要编写两个单独的函数编码和解码多维数组在php中。 我附上一个插件.......... encode.class.php ..............

<?php 

/*------------------------- 
Author: Jonathan Pulice 
Date: July 26th, 2005 
Name: JPEncodeClass v1 
Desc: Encoder and decoder using patterns. 
-------------------------*/ 

class Protector 
{ 

var $Pattern = ""; 
var $PatternFlip = ""; 
var $ToEncode = ""; 
var $ToDecode = ""; 
var $Decoded = ""; 
var $Encoded = ""; 
var $Bug = false; 
var $DecodePattern = ""; 

function Debug($on = true) 
{ 
$this->Bug = $on; 
} 

function Encode() 
{ 


$ar = explode(":", $this->Pattern); 
$enc = $this->ToEncode; 

if ($this->Bug) echo "<!-- BEGIN ENCODING -->\n"; 

foreach ($ar as $num => $ltr) 
{ 
switch ($ltr) 
{ 
case "E": 
$enc = base64_encode($enc); 
break; 
case "D": 
$enc = base64_decode($enc); 
break; 
case "R": 
$enc = strrev($enc); 
break; 
case "I": 
$enc = $this->InvertCase($enc); 
break; 
} 
if ($this->Bug) echo "<!-- {$ltr}: {$enc} -->\n"; 
} 

if ($this->Bug) echo "<!-------------------->\n\n"; 

@$this->Encoded = ($enc == $this->Str) ? "<font color='red'>No Encoding/Decoding Pattern Detected!</font>" : $enc; 

return $this->Encoded; 

} 

function Decode() 
{ 

$pattern = ($this->DecodePattern != "") ? $this->DecodePattern : $this->Pattern; 

//Reverse the pattern 
$this->PatternFlip($pattern); 

//make into an array 
$ar = explode(":", $this->PatternFlip); 

$t = ($this->Encoded == "") ? $this->ToDecode : $this->Encoded; 

if ($this->Bug) echo "<!-- BEGIN DECODING -->\n"; 

foreach ($ar as $num => $ltr) 
{ 
switch ($ltr) 
{ 
case "E": 
$t = base64_encode($t); 
break; 
case "D": 
$t = base64_decode($t); 
break; 
case "R": 
$t = strrev($t); 
break; 
case "I": 
$t = $this->InvertCase($t); 
break; 
} 
if ($this->Bug) echo "<!-- {$ltr}: {$t} -->\n"; 
} 

if ($this->Bug) echo "<!-------------------->\n\n"; 

$this->Decoded = ($t == $this->Encoded) ? "<font color='red'>No Encoding/Decoding Pattern Detected!</font>" : $t; 

return $this->Decoded; 

} 

function MakePattern($len = 10) 
{ 
//possible letters 
// E - Base64 Encode 
// R - Reverse String 
// I - Inverse Case 
$poss = array('E','R', 'I'); 

//generate a string 
for ($i = 0 ; $i < $len ; $i++) 
{ 
$tmp[] = $poss[ rand(0,2) ]; 
} 

//echo $str. "<br>"; 
//fix useless pattern section RR II 
$str = implode(":", $tmp); 

//fix 
$str = str_replace('R:R:R:R:R:R' , 'R:E:R:E:R:E' , $str); 
$str = str_replace('R:R:R:R:R' , 'R:E:R:E:R' , $str); 
$str = str_replace('R:R:R:R' , 'R:E:R:E' , $str); 
$str = str_replace('R:R:R' , 'R:E:R' , $str); 
$str = str_replace('R:R' , 'R:E' , $str); 

//fix 
$str = str_replace('I:I:I:I:I:I' , 'I:E:I:E:I:E' , $str); 
$str = str_replace('I:I:I:I:I' , 'I:E:I:E:I' , $str); 
$str = str_replace('I:I:I:I' , 'I:E:I:E' , $str); 
$str = str_replace('I:I:I' , 'I:E:I' , $str); 
$str = str_replace('I:I' , 'I:E' , $str); 

//string is good, set as pattern 
$this->Pattern = $str; 
return $this->Pattern; //if we need it 

} 

function PatternFlip($pattern) 
{ 
//reverse the pattern 
$str = strrev($pattern); 

$ar = explode(":", $str); 

foreach ($ar as $num => $ltr) 
{ 
switch ($ltr) 
{ 
case "E": 
$tmp[] = "D"; 
break; 
case "D": 
$tmp[] = "E"; 
break; 
case "R": 
$tmp[] = "R"; 
break; 
case "I": 
$tmp[] = "I"; 
break; 
} 

} 

$rev = implode(":", $tmp); 

$this->PatternFlip = $rev; 

return $this->PatternFlip; 
} 

// This is my custom Case Invertor! 
// if you would like to use this in a script, please credit it to me, thank you 
function InvertCase($str) 
{ 
//Do initial conversion 
$new = strtoupper($str); 

//spluit into arrays 
$s = str_split($str); 
$n = str_split($new); 

//now we step through each letter, and if its the same as before, we swap it out 
for ($i = 0; $i < count($s); $i++) 
{ 
if ($s[$i] === $n[$i]) //SWAP THE LETTER 
{ 
//ge the letter 
$num = ord($n[$i]); 

//see if the ord is in the alpha ranges (65 - 90 | 97 - 122) 
if (($num >= 65 AND $num <= 90) OR ($num >= 97 AND $num <= 122)) 
{ 
if ($num < 97) { $num = $num + 32; } 
else { $num = $num - 32; } 

$newchr = chr($num); 

$n[$i] = $newchr; 
} 
} 
} 

//join the new string back together 
$newstr = implode("", $n); 

return $newstr; 

} 

} 

?>............ 

从这个插件,我需要使用我的函数中的编码和解码函数用于模式检查。 如果有人能帮助我.......这会是很好的me.coz我需要它........

+1

[如何是从以前的问题,这有什么不同?(http://stackoverflow.com/questions/5322129/php-array-encoding-and-decodingneed -a-function-for-encoding-and-decoding-string)看起来像是一个完全重复的东西,直到没有用的解释。 – Charles 2011-03-18 07:07:13

+0

为了得到这个权利:你有编码算法,但它只适用于常规数组,并且你希望能够实际编码树(n维数组)? – 2011-03-18 07:08:13

+0

你的问题不能回答,因为这不是问题。这是一个要求为您编码的请求。既然你没有以任何有意义的方式解释混淆的代码或者你想要做什么,那么就没有人能够帮助你。在新的用户帐户下再次发帖不会改变这一点。所以请放下。 – mario 2011-03-18 07:10:52

回答

1

看起来像一个非常大的编码器/解码器类。

也许这RC4算法会更容易

//encrypt 
$encrypted = RC4Crypt::encrypt('your key','some string to encrypt'); 

//decrypt 
$decrypted = RC4Crypt::encrypt('your key',$encrypted); 

//The RC4 Class 
class RC4Crypt { 
    function encrypt ($pwd, $data){ 
     $key[] = ''; 
     $box[] = ''; 
     $pwd_length = strlen($pwd); 
     $data_length = strlen($data); 
     for ($i = 0; $i < 256; $i++){ 
      $key[$i] = ord($pwd[$i % $pwd_length]); 
      $box[$i] = $i; 
     } 
     for ($j = $i = 0; $i < 256; $i++){ 
      $j = ($j + $box[$i] + $key[$i]) % 256; 
      $tmp = $box[$i]; 
      $box[$i] = $box[$j]; 
      $box[$j] = $tmp; 
     } 
     $cipher = ''; 
     for ($a = $j = $i = 0; $i < $data_length; $i++){ 
      $a = ($a + 1) % 256; 
      $j = ($j + $box[$a]) % 256; 
      $tmp = $box[$a]; 
      $box[$a] = $box[$j]; 
      $box[$j] = $tmp; 
      $k = $box[(($box[$a] + $box[$j]) % 256)]; 
      $cipher .= chr(ord($data[$i])^$k); 
     } 
     return ($cipher); 
    } 
    function decrypt ($pwd, $data){ 
     return RC4Crypt::encrypt($pwd, ($data)); 
    } 
}