<?php

function encrypt_str($str) 
{
	$compressed = $str;
	$encrypted = crypto($compressed);
	$encoded = base64_encode($encrypted);
	$cleaned = strtr($encoded, '+/=', '-_,');
	return $cleaned;
}

function decrypt_str($cleaned) 
{
	$cleaned = strtr($cleaned, '-_,', '+/=');
	$decoded = base64_decode($cleaned);
	$unencrypted = crypto($decoded);
	$str = $unencrypted;
	return $str;
}

function crypto($str) {
    $ky = str_replace(chr(32), '', HASH_KEY);
    if (strlen($ky) < 8) exit('key error');
    $kl = strlen($ky) < 32 ? strlen($ky) : 32;
    $k = array();
    for ($i = 0; $i < $kl; ++$i) {
        $k[$i] = ord($ky{$i}) & 0x1F;
    }   
    $j = 0;
    for ($i = 0; $i < strlen($str); ++$i) {
    	$e = ord($str{$i});
	    $str{$i} = $e & 0xE0 ? chr($e ^ $k[$j]) : chr($e);
	    ++$j;
	    $j = $j == $kl ? 0 : $j;
	}   
	return $str;
}

/**********************************
///////encrypt link ///////
**********************************/
if(!function_exists("encrypt_link"))
{ 
	function encrypt_link ($str){
			 $key = "y3lL0Wp46eS";
			 $encrypted = CryptAlg($str, $key, 0, 1, 1234567890);
			 $encoded = base64_encode($encrypted);
			 return $encoded;
	}
}

if(!function_exists("CryptAlg"))
{ 
function CryptAlg($dString,$dKey,$dType,$dIntense,$dCalcNum){
        if ($dIntense > 254) { $dIntense = 254; }
        $dNewString = $dString;
        $y=0;
        while($y <= $dIntense)
        {
           $strOutput = "";
           $x = 0;
           $i=0;
           while ($i < strlen($dNewString))
           {
                  if ($x >= strlen($dKey)) { $x = 0; }
                  if ($dType == 0)
                  {
                                $strOutput .= Chr((Ord($dNewString[$i]) + $dCalcNum) - Ord($dKey[$x]));
                  }
                  if ($dType == 1)
                  {
                        $strOutput .= Chr((Ord($dNewString[$i]) - $dCalcNum) + Ord($dKey[$x]));
                  }
                  ++$x;
                  ++$i;
           }
           ++$y;
           $dNewString = $strOutput;
        }
        return $dNewString;
}
}


function encrypt_mcrypt($string){
	$key = "Kjn89kD54";
	return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}

function decrypt_mcrypt($encrypted){
	$key = "Kjn89kD54";
	return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}

function getExpiryKey(){
	//$enc = strtr(encrypt_mcrypt(time()), '+/=', '-_,');
	return trim(encrypt_str_custom("".time()));
}

function isExpired($key, $expire_seconds){
	//$time = decrypt_mcrypt(strtr($key, '-_,', '+/='));
	$time = decrypt_str_custom($key);
	if(!intval($time)){
		//fall back if old encryption format is used on cached requests
		$time = decrypt_mcrypt(strtr($key, '-_,', '+/='));
	}
	//$time = $key;
	$elapsed = time() - $time;	//in seconds
	if($elapsed > $expire_seconds)
		$expired = true;
	else
		$expired = false;
	
	return array("expired"=>$expired, "time"=>$time, "elapsed"=>$elapsed);
}

/**
 * Custom Encrypt and decrypt to bypass HASH_KEY constant
 */
function encrypt_str_custom($str)
{
	$compressed = $str;
	$encrypted = crypto_custom($compressed);
	$encoded = base64_encode($encrypted);
	$cleaned = strtr($encoded, '+/=', '-_ ');
	return $cleaned;
}

function decrypt_str_custom($cleaned)
{
	$cleaned = strtr($cleaned, '-_,', '+/=');
	$decoded = base64_decode($cleaned);
	$unencrypted = crypto_custom($decoded);
	$str = $unencrypted;
	return $str;
}

function crypto_custom($str) {
	//$ky = str_replace(chr(32), '', HASH_KEY);
	$ky = str_replace(chr(32), '', "kjhsKJHdsa232kjn5");
	if (strlen($ky) < 8) exit('key error');
	$kl = strlen($ky) < 32 ? strlen($ky) : 32;
	$k = array();
	for ($i = 0; $i < $kl; ++$i) {
		$k[$i] = ord($ky{$i}) & 0x1F;
	}
	$j = 0;
	for ($i = 0; $i < strlen($str); ++$i) {
		$e = ord($str{$i});
		$str{$i} = $e & 0xE0 ? chr($e ^ $k[$j]) : chr($e);
		++$j;
		$j = $j == $kl ? 0 : $j;
	}
	return $str;
}

?>
