Ir para o conteúdo
ou

Software livre Brasil




Software livre, Compartilhar a fonte....  Multiplicando idéias..... Ajudando o próximo....  Tornando um sonho em realidade.... A felicidade de alguém que um dia chegou onde quis....


Compartilhe Felicidade....... Bons Negócios e ajude a manter vivo a nação open source.....!

Twitter/

Camaradinha

Jonatan

 Voltar a Compartilhando
Tela cheia

MUTANTE RIJNDAEL, COM VALIDAÇÃO E EXPIRAÇÃO

18 de Outubro de 2009, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 998 vezes

www.jntd.info

Ola pessoal aqui vai uma mão na roda pra qem precisa de segurança em requisições via GET ou POST no seu PHP....

DESCRIÇÃO,,,, Este código lhe permite encriptar seus dados de uma forma segura com identificação por maquina e tempo de expiração, em uma forma mutante ou seja a mesma coisa gera sempre um sequencia diferente......

A questão da validação por maquina, se refere que cada dado encriptado pelo mutante leva em conta o seu ip, ip reverso e browser da maquina. Sendo só sera possível descriptografar a sequencia o computador idêntico ao que criptgrafou a sequencia.

A questão de expiração da sequencia: na função Dmut($var1, $var2) a variavel $var2 para teterminar a sua função os segundos de expiração, 60 = 1m

Forma de Uso: este script e baseado em duas funções, a Emut("$VAR1", $VAR2); que se encarregara de encriptar seu dado, sendo que para $VAR1 para os dados a serem validado e a $VAR2 para com o valor 1 ou 0, 1 para validação por maquina. E a Dmut($VAR1, $VAR2); nesta função se encarregará de interpretar a sua sequencia e desmenbra-la, sendo a variavel $VAR1 para sua sequencia encriptade e a variavel  $VAR2 para determinar o periodo de expiração

o mutante e baseado em um arquivo somente que no caso é o request_mutex.php.

//////////////////////////////////////////////////////

Arquivo requert_mutex.php:

//////////////////////////////////////////////////////

<?php

/**
* @author Jonatan Villela
* @copyright 2009
*/


defined( '_JONATAN_' ) or die( '


-->




Você não tem permissão para acessar esta área...

Acesso Restrito Jonatan Villela - Encryption System; jonatan.villela@gmail.com



jonatandesign.com


' );

////////////////////////////////////////////////////////////////////////////////////////////////
/////// configuração do mutante//////////////////////////////////////////////////////////////////////////////////////
// senha padrao


$senha_privada_3 = '123456';

// CONFIG Gerador de Senhas de predestinação
/// nunca use as mesmas senha que estão neste tutorial


$GEN_PRE_A = Array( 'v','e','W','4','3','L','g','q','C','i','1','b' );
$GEN_PRE_B = Array( 'o','6','q','e','s','m','n','4','t','w','a','J' );
$GEN_PRE_C = Array( 'g','k','x','t','u','f','1','6','q','V','Q','K' );
$GEN_PRE_D = Array( 'Q','V','F','Z','f','g','7','1','3','o','e','R' );


// Forca da Predestinação com 12 Chars
//configuração do php: memory_limit = 256M || 1024 || 2048
// 4 = 256M; 5 = 1024; 6 = 2048M; para media
//
// 4 = 11880 presenhas // 5 = 95040 // 6 = 665280 // 7 = timer out em 50s com 2048M
//


$force_PRE_IN = 4;

//////////////////////////////// fim da configuração /////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////


class CB {


var $__loop;
var $__returnedValue;
var $__limit;
var $__matches;
var $__sep;
var $__delsep;
var $__C;

function Combinatory( $__sep = '' ) {
if( $__sep == '' ) {
$this->__sep = md5( microtime() );
$this->__delsep = true;
}
else {
$this->__sep = &$__sep;
$this->__delsep = false;
}
}

function result( $container, $match, $type ) {
$this->__loop = '';
$this->__returnedValue = '';
$this->__limit = count( $container );
$this->__matches = Array();
$this->__C = Array();
if( $match < 2 || $this->__limit < $match ) {
return Array( 'This is not a good idea, please change elements or $match value .' );
}
switch( $type ) {
case 'Pn':
return $this->__checkReturn( $this->__combinatory_Pn( $container, $match ) );
case 'Pn(k)':
return $this->__checkReturn( $this->__combinatory_P1n( $container, $match ) );
case 'Dn,k':
return $this->__checkReturn( $this->__sort( $this->__combinatory_Pn( $container, $match ) ) );
case 'D\'n,k':
return $this->__checkReturn( $this->__sort( $this->__combinatory_P1n( $container, $match ) ) );
case 'Cn,k':
return $this->__checkReturn( $this->__combinatory_C( $container, $match, '__combinatory_Pn' ) );
case 'C\'n,k':
return $this->__checkReturn( $this->__combinatory_C( $container, $match, '__combinatory_P1n' ) );
default:
return Array( '$type error: options are "Pn" or "Pn(k)" or "Dn,k" or "D\'n,k" or "Cn,k" or "C\'n,k" .' );
}
}


function __checkReturn( $container ) {
if( $this->__delsep === true ) {
return str_replace( $this->__sep, '', $container );
}
else {
return $container;
}
}


function __combinatory_P1n( &$container, $match ) {
$this->__commonEvaluation( $match );
return $this->__codeCreator( $container );
}


function __combinatory_Pn( &$container, &$match ) {
$__possibilities = 'if( ';
for( $a = 1; $a < $match; $a++ ) {
for( $b = ($match-1); $b >= 0; $b-- ) {
if( $a !== $b ) {
$__possibilities .= '$_'.$a.' !== $_'.$b.' && ';
}
}
}
$__possibilities = substr( $__possibilities, 0, -3 );
$this->__commonEvaluation( $match, $__possibilities.') { ', ' }' );
return $this->__codeCreator( $container );
}


function __combinatory_C( &$container, &$match, $method ) {
eval( '$cAr = $this->'.$method.'( $container, $match );' );
$nAr = Array();
for( $a = 0, $b = count( $cAr ); $a < $b; $a++ ) {
$fAr = $this->__sort( $fAr = explode( $this->__sep, $cAr[$a] ) );
if( in_Array( $fAr, $this->__C ) == false ) {
array_push( $this->__C, $fAr );
array_push( $nAr, $cAr[$a] );
}
}
return $nAr;
}


function __codeCreator( &$container ) {
eval( $this->__loop );
return $this->__matches;
}


function __commonEvaluation( &$match, $pre = '', $post = '' ) {
for( $a = 0; $a < $match; $a++ ) {
$this->__loop .= 'for( $_'.$a.' = 0; $_'.$a.' < '.$this->__limit.'; $_'.$a.'++ ) { ';
$this->__returnedValue .= '$container[$_'.$a.'].\''.$this->__sep.'\'.';
}
$rm = -( strlen( $this->__sep ) + 4 );
$this->__loop .= $pre.'array_push( $this->__matches, '.substr( $this->__returnedValue, 0, $rm ).' );'.$post;
for( $a = 0; $a < $match; $a++ ) {
$this->__loop .= ' }';
}
}


function __sort( $container ) {
sort( $container );
reset( $container );
return $container;
}
}

function genRandomPassword($length = 8)
{
$salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len = strlen($salt);
$makepass = '';

$stat = @stat(__FILE__);
if(empty($stat) || !is_array($stat)) $stat = array(php_uname());

mt_srand(crc32(microtime() . implode('|', $stat)));

for ($i = 0; $i < $length; $i ++) {
$makepass .= $salt[mt_rand(0, $len -1)];
}

return $makepass;
}




// START DA FUNÇÃO PRINCIPAL ENCRIPT DO MUTANTE :: Emut////////////////////////////////////////////////////////////////////////////////////
// START DA FUNÇÃO PRINCIPAL ENCRIPT DO MUTANTE :: Emut////////////////////////////////////////////////////////////////////////////////////

function Emut($dado_privado, $valid){


if(!isset($valid)){
$valid = 1;
}




function mc_encrypt($encrypt, $mc_key) {
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($encrypt), MCRYPT_MODE_ECB, $iv));
$encode = bin2hex($passcrypt);
return $encode;
}

// Decrypt Function


////////////////////////////////////// PRODUÇÃO MULTANTE RIJNDAEL ecb - JDW 128 * 3

////predefinição de senhas.... 3
// senhas de no maximo 32 caracteres


//echo genRandomPassword(2);

$CB_1 = rand(10,99) .rand(10,99);

$CB_2 = rand(10,99) .rand(10,99);

$CB_3 = rand(10,99) .rand(10,99);

$CB_4 = rand(10,99) .rand(10,99);


$CB_5 = rand(10,99) .rand(10,99);

$CB_6 = rand(10,99) .rand(10,99);

$CB_7 = rand(10,99) .rand(10,99);

$CB_8 = rand(10,99) .rand(10,99);

//echo $CB_1 . '
';
//echo $CB_2 . '
';
//echo $CB_3 . '
';
//echo $CB_4 . '
';




$container_1 = $GEN_PRE_A;
$a = &new CB(''); // note that separator('-') is optional
$matches_1 = &$a->result( $container_1, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//11 caracteres = 7920 combinações // 12 = 11880
//echo $matches_1[$CB_1] . '
';



$container_2 = $GEN_PRE_B;
$b = &new CB(''); // note that separator('-') is optional
$matches_2 = &$b->result( $container_2, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method

//echo $matches_2[$CB_2] . '
';



$container_3 = $GEN_PRE_C;
$c = &new CB(''); // note that separator('-') is optional
$matches_3 = &$c->result( $container_3, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method

//echo $matches_3[$CB_3] . '
';



$container_4 = $GEN_PRE_D;
$d = &new CB(''); // note that separator('-') is optional
$matches_4 = &$d->result( $container_4, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method

//echo $matches_4[$CB_4] . '
';


$senha_privada_1 = $matches_1[$CB_1].$matches_2[$CB_2].$matches_3[$CB_3].$matches_4[$CB_4];
$senha_privada_2 = $matches_2[$CB_5].$matches_3[$CB_6].$matches_4[$CB_7].$matches_1[$CB_8];
$reverso_primario = $CB_1 . $CB_2 . $CB_3 . $CB_4;
$reverso_secundario = $CB_5 . $CB_6 . $CB_7 . $CB_8;


/////////////////////////////////// parte primaria: senha_1///////
// desc:: predeterminando eXpiração e organizando o mutante

$dt_tempo = time();

// IDENTIFICAÇÃO UNICA ////////////////
// IDENJTIFICAÇÃO UNICA ////////////////


if($valid == 1){

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$servprox = $host;
if(getenv('HTTP_X_FORWARDED_FOR') != ""){
$ip = getenv('HTTP_X_FORWARDED_FOR');}
if(getenv('HTTP_X_FORWARDED_FOR') == ""){
$ip = $_SERVER['REMOTE_ADDR'];}
$os = $_SERVER['HTTP_USER_AGENT'];

// reverso e ip

$chk = md5($reverso_primario . $reverso_secundario . $senha_privada_3 . $dt_tempo . $dado_privado . $ip . $servprox . $os);

}

if($valid == 0){

$chk = md5($reverso_primario . $reverso_secundario . $senha_privada_3 . $dt_tempo . $dado_privado);

}


$corpo_privado_primario = $dt_tempo . '.' . $dado_privado . '.' . $chk . '.' . $valid;
$parte_primaria = mc_encrypt($corpo_privado_primario, $senha_privada_1);


$corpo_privado_secundario = $parte_primaria . '.' . $reverso_primario;
$parte_secundaria = mc_encrypt($corpo_privado_secundario, $senha_privada_2);


$corpo_privado_terciario = $parte_secundaria . '.' . $reverso_secundario;
$parte_terciaria = mc_encrypt($corpo_privado_terciario, $senha_privada_3);

return $parte_terciaria;

}

// START DA FUNÇÃO PRINCIPAL DECRIPT DO MUTANTE :: Dmut////////////////////////////////////////////////////////////////////////////////////
// START DA FUNÇÃO PRINCIPAL DECRIPT DO MUTANTE :: Dmut////////////////////////////////////////////////////////////////////////////////////

function Dmut($dado_privado, $tmp){

function hex2bin($h)
{
if (!is_string($h)) return null;
$r='';
for ($a=0; $a
return $r;
}



// Decrypt Function
function mc_decrypt($decrypt, $mc_key) {
$decoded = hex2bin($decrypt);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($decoded), MCRYPT_MODE_ECB, $iv));
return $decrypted;
}


////////////////////////////////////// PRODUÇÃO MULTANTE RJ ecb - JDW 256

////predefinição de senhas.... 3
// senhas de no maximo 32 caracteres


$container_1 = $GEN_PRE_A;
$a = &new CB(''); // note that separator('-') is optional
$matches_1 = &$a->result( $container_1, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//11 caracteres = 7920 combinações // 12 = 11880
//echo $matches_1[$CB_1] . '
';



$container_2 = $GEN_PRE_B;
$b = &new CB(''); // note that separator('-') is optional
$matches_2 = &$b->result( $container_2, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method

//echo $matches_2[$CB_2] . '
';



$container_3 = $GEN_PRE_C;
$c = &new CB(''); // note that separator('-') is optional
$matches_3 = &$c->result( $container_3, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method

//echo $matches_3[$CB_3] . '
';



$container_4 = $GEN_PRE_D;
$d = &new CB(''); // note that separator('-') is optional
$matches_4 = &$d->result( $container_4, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method






$descript_parte_1 = mc_decrypt($dado_privado, $senha_privada_3);
$partes_n1 = explode(".", $descript_parte_1);

$partes_n1[0];
$partes_n1[1];


$t1 = substr($partes_n1[1], 0, 4);// . "
"; //
$t2 = substr($partes_n1[1], 4, 4);// . "
"; //
$t3 = substr($partes_n1[1], 8, 4);// . "
"; //
$t4 = substr($partes_n1[1], 12, 4);// . "
"; //



$senha_privada_2 = $matches_2[$t1].$matches_3[$t2].$matches_4[$t3].$matches_1[$t4];

$descript_parte_2 = mc_decrypt($partes_n1[0], $senha_privada_2);
$partes_n2 = explode(".", $descript_parte_2);

$partes_n2[0];
$partes_n2[1];

$t21 = substr($partes_n2[1], 0, 4);// . "
"; //
$t22 = substr($partes_n2[1], 4, 4);// . "
"; //
$t23 = substr($partes_n2[1], 8, 4);// . "
"; //
$t24 = substr($partes_n2[1], 12, 4);// . "
"; //


$senha_privada_1 = $matches_1[$t21].$matches_2[$t22].$matches_3[$t23].$matches_4[$t24];


$descript_parte_1 = mc_decrypt($partes_n2[0], $senha_privada_1);
$partes_n3 = explode(".", $descript_parte_1);

$partes_n3[0]; //tempo pra checar
$partes_n3[1]; // dados recuperados
$partes_n3[2]; // checar hash
$partes_n3[3]; // checagem para levar em conta a validação por ip


if(!isset($tmp)){
$tmp = '150';
}

$tempo_B = $partes_n3[0] + $tmp;
$expira_t = time();


if($partes_n3[3] == 1){


$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$servprox = $host;
if(getenv('HTTP_X_FORWARDED_FOR') != ""){
$ip = getenv('HTTP_X_FORWARDED_FOR');}
if(getenv('HTTP_X_FORWARDED_FOR') == ""){
$ip = $_SERVER['REMOTE_ADDR'];}
$os = $_SERVER['HTTP_USER_AGENT'];

/*
echo $ip . "
";
echo $servprox . "
";
echo $os . "
";
*/

$chkR = md5($t21.$t22.$t23.$t24.$t1.$t2.$t3.$t4.$senha_privada_3 . $partes_n3[0] . $partes_n3[1] . $ip . $servprox . $os);

}

if($partes_n3[3] == 0){

$chkR = md5($t21.$t22.$t23.$t24.$t1.$t2.$t3.$t4.$senha_privada_3 . $partes_n3[0] . $partes_n3[1]);

}



if($partes_n3[2] != $chkR){


return "Dados Inválidos.";


}

else if($expira_t > $tempo_B){


return "Dados Inválidos.";


}

else{

return $partes_n3[1];


}
}
?>


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// Arquivo de USo

//////////////////////////////////////////////////

teste.php

//////////////////////////////////////////////////




define('_JONATAN_', 1);

include('request_mutex.php');


$teste_encript_mutante = Emut('jonatan villela', '1');


$teste_decript_mutante = Dmut($teste_encript_mutante, '300');


echo $teste_encript_mutante . "
";

echo $teste_decript_mutante . "
";

?>


///////////////////////////////////////////////


Tags deste artigo: rijndael criptografia validação expiração mutante php

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.