a string e a funcao "base64_decode" decodifica a string.A ideia deste exemplo e codificar a string original, inverte-la e adicionar um prefixo aleatorio, repetindo tudo isso por tres vezes. Este prefixo e para confundir o resultado final, impossibilitando a decodificacao direta. Como se nao fosse o bastante, os caracteres da string resultante sao trocados, gerando outra confusao no resultado final. Segue a classe de exemplo:class cripto { function codificar($str) { $prfx = array('AFVxaIF', 'Vzc2ddS', 'ZEca3d1', 'aOdhlVq', 'QhdFmVJ', 'VTUaU5U', 'QRVMuiZ', 'lRZnhnU', 'Hi10dX1', 'GbT9nUV', 'TPnZGZz', 'ZGiZnZG', 'dodHJe5', 'dGcl0NT', 'Y0NeTZy', 'dGhnlNj', 'azc5lOD', 'BqbWedo', 'bFmR0Mz', 'Q1MFjNy', 'ZmFMkdm', 'dkaDIF1', 'hrMaTk3', 'aGVFsbG'); for($i=0; $i<3; $i++) { $str = $prfx[array_rand($prfx)].strrev(base64_encode($str)); } $str = strtr($str, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "a8rqxPtfiNOlYFGdonMweLCAm0TXERcugBbj79yDVIWsh3Z5vHS46pQzKJ1Uk2"); return $str; } function decodificar($str) { $str = strtr($str, "a8rqxPtfiNOlYFGdonMweLCAm0TXERcugBbj79yDVIWsh3Z5vHS46pQzKJ1Uk2", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); for($i=0; $i<3; $i++) { $str = base64_decode(strrev(substr($str,7))); } return $str; } function separar_parametros($param) { return explode('&',$param); } function separar_valor($opcao) { return explode('=',$opcao); } }No script que ira montar a pagina HTML, no momento da edicao da etiqueta "a" ou de outra etiqueta que use uma URL, chama-se a funcao "codificar", da classe "cripto", para gerar a URL do atributo "href". Os parametros originais sao transformados em um unico valor para o parametro "p", que sera coletado na solicitacao. O parametro "p" ficara visivel na URL mas seu valor estara codificado. Segue alguns exemplos de aplicacao da funcao "codificar":'<a href="index.php?p='.$this->cripto->codificar("op=F&md=E").'">''<a href="cliente.php?p='.$this->cripto->codificar("op=A&md=F&id=".$idcliente).'">''<button type="button" value="Cancelar" onclick="location.href=\'index.php?p='.$this->cripto->codificar("op=A&md=I").'\'">Cancelar</button>'header("Location: index.php?p=".$this->cripto->codificar('op=L&md=C'));Por sua vez, o script invocado pela URL deve ler o valor do parametro "p" que esta na variavel $_GET, variavel predefinida que coleta valores no metodo GET, e executar a funcao de decodificar. Apos a decodificacao, a string com os pares originais (nome e valor) deve ser separada nos parametros originais e seus respectivos valores e armazenados em variaveis que serao utilizadas no decorrer do script PHP. Segue exemplo:$cripto = new cripto;$param = isset($_GET["p"]) ? $_GET["p"] : '';$op = $md = $id = '';$parametros = $cripto->separar_parametros($cripto->decodificar($param));foreach($parametros as $opcao) { $valor = $cripto->separar_valor($opcao); if ($valor[0]=='op') $op = $valor[1]; elseif ($valor[0]=='md') $md = $valor[1]; elseif ($valor[0]=='id') $id = $valor[1];}As funcoes auxiliares "separar_parametros" e "separar_valor" tratam a string decodificada. A funcao "explode", nativa do PHP, retorna uma matriz de strings, cada uma com uma substring formada pela divisao a partir do delimitador especificado.Esta solucao funciona muito bem para o proposito. O algoritmo criado para confundir a codificacao Base64 e o segredo. O sucesso vai da imaginacao do programador.Uma limitacao tecnica desta solucao e quanto ao limite do tamanho da URL. A URL e limitada a um tamanho maximo de 2048 caracteres. Os dados codificados em Base64 ficam aproximadamente 33% maiores que os dados originais. Realizando a codificacao mais de uma vez e adicionando o prefixo, o resultado e bem maior. Mas e raro precisar de uma URL tao grande.