neel_basu Posted August 4, 2007 Share Posted August 4, 2007 Hi! all if you dont have mCrypt you can use this Encryption class as an alternative (based on XOR Encryption) Plese post if you find any bugs. <?php class crytpo{ /* Encryptor Class without mcrypt Author Neel basu This is a Pre release beta of Zogmoyd's next version's Level 1 Encryption Class Made on july 15 2007. Its Under GPL Licence Please see GNU GPL before using it. you can Use it Untill the above message is intact. */ private $val; public function __construct(){ if(!defined('BLOCK_SIZE')){define('BLOCK_SIZE', 4);} if(!defined('BLOCK_JUNK')){define('BLOCK_JUNK', 5);} if(!defined('ENC_BIN')){define('ENC_BIN', true);} if(!defined('ENC_DEC')){define('ENC_DEC', false);} $this->val = array(' ', '+', '_', '*', '&', ':', '-', '@', '=', '%'); } private function blockise($str){ if(strlen($str) >= BLOCK_SIZE*2){return $str;} while(strlen($str) < BLOCK_SIZE*2){ $str .= chr(BLOCK_JUNK); } return $str; } private function dblockise($str){ for($i=strlen($str)-1;$i>=strlen($str)-1-8;$i--){ if($str[$i] != chr(BLOCK_JUNK)){break;} $str = substr($str, 0, $i); } return $str; } private function psubstr($str, $start, $len){ if($start < 0){$tmp = "";return $tmp;}; return substr($str, $start, $len); } private function get_block($str, $i){return $this->psubstr($str, $i, BLOCK_SIZE);} private function x_enc($string, $key){ for($i=0; $i<=strlen($string)-1; $i++){ for($j=0; $j<=strlen($key)-1; $j++){ $string[$i] = $string[$i]^$key[$j]; } if($i != 0 && $i != strlen($string)-1){ $string[$i] = $string[$i]^$string[$i-1]^$string[$i+1]; } } return $string; } private function x_dcd($string, $key){ for($i=strlen($string)-1; $i>=0; $i--){ if($i == 0 || $i == strlen($string)-1){ for($j=0; $j<=strlen($key)-1; $j++){ $string[$i] = $string[$i]^$key[$j]; } }else{ $string[$i] = $this->x_enc($string[$i], $key)^$string[$i-1]^$string[$i+1]; } } return $string; } private function enc($str, $key){ $str = base64_encode($this->blockise($str)); for($i=0;$i<=strlen($str)-1;$i+=BLOCK_SIZE){ if($i == 0 || $i == (strlen($str)-BLOCK_SIZE)){ $repl = $this->x_enc($this->psubstr($str, $i, BLOCK_SIZE), $key); $str = substr_replace($str, $repl, $i, BLOCK_SIZE); }else{ if($i == BLOCK_SIZE){ $b = $this->x_enc($this->get_block($str, $i), $key); } $repl = $this->x_enc($this->get_block($str, $i+BLOCK_SIZE), $this->get_block($str, $i-BLOCK_SIZE)); $str = substr_replace($str, $repl, $i, BLOCK_SIZE); } } $str .= $b; return $str; } private function dcd($str, $key){ $b = $this->x_dcd($this->get_block($str, strlen($str)-BLOCK_SIZE), $key); $str = substr($str, 0, strlen($str)-BLOCK_SIZE); for($i=strlen($str)-BLOCK_SIZE;$i>=0;$i-=BLOCK_SIZE){ if($i == 0 || $i == (strlen($str)-BLOCK_SIZE)){ $repl = $this->x_dcd($this->psubstr($str, $i, BLOCK_SIZE), $key); $str = substr_replace($str, $repl, $i, BLOCK_SIZE); }else{ if($i == BLOCK_SIZE){ $str = substr_replace($str, $b, $i, BLOCK_SIZE); }else{ $repl = $this->x_dcd($this->psubstr($str, $i-BLOCK_SIZE, BLOCK_SIZE), $this->psubstr($str, $i-(BLOCK_SIZE*2), BLOCK_SIZE)); $str = substr_replace($str, $repl, $i, BLOCK_SIZE); } } } return $this->dblockise(base64_decode($str)); } public function encode($str, $key, $mode = ENC_BIN){ if($mode == ENC_BIN){ return $this->enc($this->enc($str, $key), md5($key)); }elseif($mode == ENC_DEC){ return $this->dec_encode($this->enc($this->enc($str, $key), md5($key))); } trigger_error("Invalid MODE SPecified", E_ERROR); return false; } public function decode($str, $key, $mode = ENC_BIN){ if($mode == ENC_BIN){ return $this->dcd($this->dcd($str, md5($key)), $key); }elseif($mode == ENC_DEC){ return $this->dcd($this->dcd($this->dec_decode($str), md5($key)),$key); } trigger_error("Invalid MODE SPecified", E_ERROR); return false; } private function dec_decode($salted){ $key = array(0,1,2,3,4,5,6,7,8,9);$ret = ''; $val = $this->val; $str = str_replace($val, $key, $salted); for($i=0;$i<=strlen($str)-1;$i+=3){ $current_group = $str[$i].$str[$i+1].$str[$i+2]; $tmp_int = (int)($current_group); $ret .= chr($tmp_int); } return base64_decode($ret); } private function dec_encode($salt){ $str = base64_encode($salt);$tmp = ''; for($i=0;$i<=strlen($str)-1;$i++){ if(ord($str[$i]) < 100){ if(ord($str[$i]) > 0 && ord($str[$i]) < 10){ $num = "00".ord($str[$i]); } elseif(ord($str[$i]) >= 10 && ord($str[$i]) < 100){ $num = "0".ord($str[$i]); } } else{ $num = ord($str[$i]); } $tmp .= $num; } $key = array(0,1,2,3,4,5,6,7,8,9); $val = $this->val; $ret = str_replace($key, $val, $tmp); return $ret; } } ?> ------------------------- USAGE ---------------------------------- <?php $str = "1111111111111111111111111111111"; $key = "neel"; $crypto = new crytpo(); $e = $crypto->encode($str, $key); echo "Encrypted \t[".$e."] Length \t".strlen($e)."\n\n"; $d = $crypto->decode($e, $key); flush();//This is not needed at all. echo "Decrypted \t[".$d."] Length ".strlen($d)."\n"; ?> Encrypted [ P5q#Qqn_<1gvOkqno4QrjztwFeQ *T) bQQvi:j2<] Length 68 Decrypted [1111111111111111111111111111111] Length 31 <?php $str = "1111111111111111111111111111111"; $key = "neel"; $crypto = new crytpo(); $e = $crypto->encode($str, $key, ENC_DEC); echo "Encrypted \t[".$e."] Length \t".strlen($e)."\n\n"; $d = $crypto->decode($e, $key, ENC_DEC); flush();//This is not needed at all. echo "Decrypted \t[".$d."] Length ".strlen($d)."\n"; ?> Encrypted [ -@+_ &% =+ @= =_ @* =% %% =* @@ -: =: == @ ++@ @_ --++-+ _ = -: %%+_ -=++%+ ++ @++ &+_ : =& : ++-+_ %=+ % :-+ @= @ @ +_+ %@++ ++_ &=+ +_ + * =: =_+ % =- =_ @ -:++- :* %=++ @& % %%+ @ =%++* =- -: @@ @: @: =_++_+ : =: =_ @@ @@ -- &% @ : %@ =&++_++* @@+ -++% -+] Length 276 Decrypted [1111111111111111111111111111111] Length 31 ENC_DEC is an optional argument that again encrypts the encrypted string with 10 characters $this->val = array(' ', '+', '_', '*', '&', ':', '-', '@', '=', '%'); near line 15 . You can change these characters to customize it. ------------------------------ SECURITY -------------------------------------- See here we are encrypting 1111111111111111111111111111 a repetative character string But see the encrypted String there is no repetation If you use ENC_DEC the hacker will need to know 11 things the keyword and that 10 Characters Thats hardly possible. Quote Link to comment https://forums.phpfreaks.com/topic/63302-encryption-class/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.