Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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??
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
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
>
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.
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/
bcmath é uma uma library do php.
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..
>
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.
>
bcmath é uma uma library do php.
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?
>
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.
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:
// $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