| 
<?php
/*
 Created by Mohammad Dayyan - 1387/3/2
 [email protected]
 */
 if ( !defined('MohammadDayyan') )
 {
 die ("Hacking attempt <br /> <b>" . __FILE__ . "<br /> Line " .  __LINE__  . "</b>" );
 exit;
 }
 
 class DayyanRandomCharacters
 {
 private $id;
 private $key_str;
 private $Code;//Orginal string code
 
 ////////////////////////////////////////////////////////////////////////////////
 
 public function __construct()
 {
 $this -> create();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 public function get_code()
 {
 return $this -> Code;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 private function create()
 {
 $string = "";
 $string = md5(rand(0, microtime() * 1000000));
 $this-> id = $this->Code   = substr($string, 3, 6);
 $this-> key_str = md5(rand(0, 999));
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 private function get_rnd_iv($iv_len)
 {
 $iv = '';
 while ($iv_len-- > 0) {
 $iv .= chr(mt_rand() &0xff);
 }
 return $iv;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 public function get_id()
 {
 
 return urlencode($this -> md5_encrypt($this->id, $this->key_str));
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 public function get_key()
 {
 return $this -> key_str;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 //encrypt id
 private function md5_encrypt($plain_text, $password, $iv_len = 16)
 {
 $plain_text .= "x13";
 $n = strlen($plain_text);
 if ($n % 16) $plain_text .= str_repeat("0", 16 - ($n % 16));
 $i = 0;
 $enc_text = $this -> get_rnd_iv($iv_len);
 $iv = substr($password ^ $enc_text, 0, 512);
 while ($i < $n)
 {
 $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
 $enc_text .= $block;
 $iv = substr($block . $iv, 0, 512) ^ $password;
 $i += 16;
 }
 return base64_encode($enc_text);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
 public function md5_decrypt($enc_text, $password, $iv_len = 16)
 {
 $enc_text = base64_decode($enc_text);
 $n = strlen($enc_text);
 $i = $iv_len;
 $plain_text = '';
 $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
 while ($i < $n)
 {
 $block = substr($enc_text, $i, 16);
 $plain_text .= $block ^ pack('H*', md5($iv));
 $iv = substr($block . $iv, 0, 512) ^ $password;
 $i += 16;
 }
 return preg_replace('/\\x13\\x00*$/', '', $plain_text);
 }
 }
 
 ?>
 |