Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ro.fonseca

[Resolvido] Criptografar o GET no PHP

Recommended Posts

Entao, qual a melhor forma de se criptografar o metodo GET do php??? Já tentei de várias formas, vamos imaginar q estejamos passando um id, daeee somente criptografar o tal id fica muito obvio, daee entao eu pensei em colocar uma palavra chave concatenada com o id e depois pelo metodo explode recuperar esse id, mas tb nao deu, pq ficou mt obvio, já q a criptografia da palavra chave iria ser sempre a mesma, daee entao eu passei a juntar os 2, mas logo percebi q pra recuperar o id seria impossivel... Entao o q fazer??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente lembro que não existem criptografias de "duas mãos". Codificar é uma outra coisa, e é isso que você quer...rs

 

Pelo o que eu sei, a codificação mais conhecida e usada é a base64. Ela gera uma string hexadecimal de um tamanho mais ou menos 33% maior que a string original.

 

Para usá-la, faça que nem o exemplo:

 

<?php

$string = "O melhor jeito de descer um prédio é pela janela";

$string = base64_encode($string);
// $string = TyBtZWxob3IgamVpdG8gZGUgZGVzY2VyIHVtIHBy6WRpbyDpIHBlbGEgamFuZWxh

$string = base64_decode($string);
// $string = O melhor jeito de descer um prédio é pela janela
?>

 

Claro que há outros tipos de codificações, basta procurar...

 

Documentação: http://php.net/manual/en/function.base64-encode.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize um hash reversível

 

	function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
	$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	if ($passKey !== null) {
		// Although this function's purpose is to just make the
		// ID short - and not so much secure,
		// with this patch by Simon Franz (http://blog.snaky.org/)
		// you can optionally supply a password to make it harder
		// to calculate the corresponding numeric ID

		for ($n = 0; $n<strlen($index); $n++) {
			$i[] = substr( $index,$n ,1);
		}

		$passhash = hash('sha256',$passKey);
		$passhash = (strlen($passhash) < strlen($index))
			? hash('sha512',$passKey)
			: $passhash;

		for ($n=0; $n < strlen($index); $n++) {
			$p[] =  substr($passhash, $n ,1);
		}

		array_multisort($p,  SORT_DESC, $i);
		$index = implode($i);
	}

	$base  = strlen($index);

	if ($to_num) {
		// Digital number  <<--  alphabet letter code
		$in  = strrev($in);
		$out = 0;
		$len = strlen($in) - 1;
		for ($t = 0; $t <= $len; $t++) {
			$bcpow = bcpow($base, $len - $t);
			$out   = $out + strpos($index, substr($in, $t, 1)) * $bcpow;
		}

		if (is_numeric($pad_up)) {
			$pad_up--;
			if ($pad_up > 0) {
				$out -= pow($base, $pad_up);
			}
		}
		$out = sprintf('%F', $out);
		$out = substr($out, 0, strpos($out, '.'));
	} else {
		// Digital number  -->>  alphabet letter code
		if (is_numeric($pad_up)) {
			$pad_up--;
			if ($pad_up > 0) {
				$in += pow($base, $pad_up);
			}
		}

		$out = "";
		for ($t = floor(log($in, $base)); $t >= 0; $t--) {
			$bcp = bcpow($base, $t);
			$a   = floor($in / $bcp) % $base;
			$out = $out . substr($index, $a, 1);
			$in  = $in - ($a * $bcp);
		}
		$out = strrev($out); // reverse
	}

	return $out;
}

 

o autor é o kevin, mestre em javascript que screve os códigos php.js

http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/

 

discução interessante

http://stackoverflow.com/questions/1853471/php-help-improve-the-efficiency-of-this-youtube-style-url-generator

 

 

nota: é necessário possuir a lib bcmath.

Em ambiente unix, a instalação padrão do php não possui o bcmath. Para resolver, instale-o.

> yum install php-bcmath

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente lembro que não existem criptografias de "duas mãos". Codificar é uma outra coisa, e é isso que você quer...rs

 

Pelo o que eu sei, a codificação mais conhecida e usada é a base64. Ela gera uma string hexadecimal de um tamanho mais ou menos 33% maior que a string original.

 

Para usá-la, faça que nem o exemplo:

 

<?php

$string = "O melhor jeito de descer um prédio é pela janela";

$string = base64_encode($string);
// $string = TyBtZWxob3IgamVpdG8gZGUgZGVzY2VyIHVtIHBy6WRpbyDpIHBlbGEgamFuZWxh

$string = base64_decode($string);
// $string = O melhor jeito de descer um prédio é pela janela
?>

 

Claro que há outros tipos de codificações, basta procurar...

 

Documentação: http://php.net/manual/en/function.base64-encode.php

 

o problema no q tu falow, é q basta somente usar uma outra funcao para decodificar, tá muito facil.

 

 

 

nota: é necessário possuir a lib bcmath.

Em ambiente unix, a instalação padrão do php não possui o bcmath. Para resolver, instale-o.

> yum php-bcmath

 

Ok, vou dar uma olhada nisso, mas o q seria esse yum php-bcmath??? O problema é eu instala-lo em minha maquina e ele nao existe no servidor onde eu hospedo o site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criptografia tem volta sim, hash não tem.

Você pode fazer uma classe de criptografia própria, embaralhando os caracteres e depois com alguma função de codificação tornar mais difícil descobrir o id.

Eu fiz uma classe de criptografia com método reverso, pode ver em http://hudolfhess.com/blog/php/classe-de-criptografia-com-metodo-reverso/

Compartilhar este post


Link para o post
Compartilhar em outros sites

bcmath é uma uma library do php.

http://php.net/bcmath

em ambiente windows, sob instalação padrão, é nativa, portanto, nao precisa se preocupar.

 

em ambiente linux, verifique se o host possui bcmath compilado com o php

 

o comando acima é para instalação do bcmath em ambientes nix sem necessidade de recompilar o php

 

 

quanto ao script,

você pode modificá-lo para outro meio que nao seja pelas funções bcmath mas o código ficará imenso..

 

o script acima basicamente transforma uma string no formato dos IDs que sites como tiny, bit.ly, youtube e outros utilizam.

uma grande vantagem nesse exemplo acima é poder decodificá-lo para a string original e também adicionar seu próprio salt como chave privada.

 

é interessante também filtrar consoantes e vogais para evitar que seja criado palavras como "bost*", "merd*", etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente lembro que não existem criptografias de "duas mãos". Codificar é uma outra coisa, e é isso que você quer...rs

 

Deveria se informar melhor antes de falar o que não sabe.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

bcmath é uma uma library do php.

http://php.net/bcmath

em ambiente windows, sob instalação padrão, é nativa, portanto, nao precisa se preocupar.

 

em ambiente linux, verifique se o host possui bcmath compilado com o php

 

o comando acima é para instalação do bcmath em ambientes nix sem necessidade de recompilar o php

 

 

quanto ao script,

você pode modificá-lo para outro meio que nao seja pelas funções bcmath mas o código ficará imenso..

 

o script acima basicamente transforma uma string no formato dos IDs que sites como tiny, bit.ly, youtube e outros utilizam.

uma grande vantagem nesse exemplo acima é poder decodificá-lo para a string original e também adicionar seu próprio salt como chave privada.

 

é interessante também filtrar consoantes e vogais para evitar que seja criado palavras como "bost*", "merd*", etc..

 

Meu ambiente aqui no locahost é Windows nao preciso me preocupar em baixar essa biblioteca entao? caso eu hospede o sistema no ambiente linux eu teria que fazer o que?? Baixar e jogar numa biblioteca dos meus arquivos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

terceira vez que comento o mesmo assunto

 

em ambiente windows não tem com o que se preocupar em relação ao bcmath

 

em ambiente linux, se o php estiver compilado na forma padrão, provavelmente não estara´habilitado

 

para certificar-se de qeu o host de hospedagem possui a library, execute o phpinfo() e veja se aparece a tabela do bcmath

<?phpphpinfo();?>

se não possuir a library, peça ao administrador do host para que instale, se for viável.

é verdade... vlw! assunto resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.