<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Carlos André Ferrari &#187; criptografia</title>
	<atom:link href="http://ferrari.eti.br/tag/criptografia/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrari.eti.br</link>
	<description>php, python, xhtml, html5, css, javascript, jquery, webstandards, linux, nginx</description>
	<lastBuildDate>Thu, 29 Jul 2010 10:05:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Links encriptados no PHP</title>
		<link>http://ferrari.eti.br/links-encriptados-no-php/</link>
		<comments>http://ferrari.eti.br/links-encriptados-no-php/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 13:27:07 +0000</pubDate>
		<dc:creator>caferrari</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[criptografia]]></category>

		<guid isPermaLink="false">http://ferrari.eti.br/?p=11</guid>
		<description><![CDATA[Nesse post vou exemplificar como utilizar a classe XOR exemplificada no post Operador XOR no PHP para criação de URLs encriptadas usando uma espécie de checksum que irá impedir que alguem possa alrera-la. as vantagens dessa técnica são:

URLs camufladas
PHP camuflado
Variáveis passadas pela URL sempre válidas
Impossibilidade de Modificação da querystring manualmente

Aqui está o exemplo de hoje: [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse post vou exemplificar como utilizar a classe <a href="http://pt.wikipedia.org/wiki/XOR">XOR</a> exemplificada no post <a href="http://ferrari.eti.br/operador-xor-no-php/">Operador XOR no PHP</a> para criação de URLs encriptadas usando uma espécie de <a href="http://pt.wikipedia.org/wiki/Checksum">checksum</a> que irá impedir que alguem possa alrera-la. as vantagens dessa técnica são:</p>
<ul>
<li>URLs camufladas</li>
<li>PHP camuflado</li>
<li>Variáveis passadas pela URL sempre válidas</li>
<li>Impossibilidade de Modificação da querystring manualmente</li>
</ul>
<p>Aqui está o exemplo de hoje: <a href="http://ferrari.eti.br/exemplos/fw1" target="_blank">http://ferrari.eti.br/exemplos/fw1</a></p>
<p>Esse exemplo utiliza <a href="http://json.org/json-pt.html">jSon</a>, se você não sabe o que é, veja <a href="http://json.org/json-pt.html">aqui</a>.</p>
<p>Para começar, vamos criar o arquivo: includes/classes/crypt.php e colocar o código do post: <a href="http://ferrari.eti.br/operador-xor-no-php/">Operador XOR no PHP</a>.</p>
<p>Depois criaremos a nossa classe mais importante: includes/classes/link.php e vamos edita-lá:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// incluímos a classe de criptografia</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;crypt.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Variavel global similar a $_POST, porém sua função é</span>
<span style="color: #666666; font-style: italic;">// armazenar os valores passados pela querystring</span>
<span style="color: #000088;">$_PAR</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #990000;">Link</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// Variável que armazena a chave do checksum</span>
     static <span style="color: #000088;">$chave</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;chavedockecksum&quot;</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #666666; font-style: italic;">// Variável que armazena o link</span>
     <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #666666; font-style: italic;">// construtor, os parâmetros são simples</span>
     <span style="color: #666666; font-style: italic;">// pagina = arquovo php a ser chamado</span>
     <span style="color: #666666; font-style: italic;">// parametros: parâmetros da chamada ex: &quot;id=10&amp;amp;tipo=noticia&quot;</span>
     <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">Link</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pagina</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametros</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #666666; font-style: italic;">// chama o método responsável pela criação do link</span>
          <span style="color: #666666; font-style: italic;">// repassando os parâmetros</span>
          <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>link <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>criaLink<span style="color: #009900;">&#40;</span><span style="color: #000088;">$pagina</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
          <span style="color: #666666; font-style: italic;">// retorna o link encriptado</span>
          <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>link<span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
     static <span style="color: #000000; font-weight: bold;">function</span> criaLink<span style="color: #009900;">&#40;</span><span style="color: #000088;">$pagina</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametros</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #666666; font-style: italic;">// transforma os parâmetros em um array associativo</span>
          <span style="color: #990000;">parse_str</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parametros</span><span style="color: #339933;">,</span> <span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
          <span style="color: #666666; font-style: italic;">// adiciono nesse array na posição &quot;_pagina&quot; o arquivo php</span>
          <span style="color: #000088;">$p</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_pagina&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pagina</span><span style="color: #339933;">;</span>
&nbsp;
          <span style="color: #666666; font-style: italic;">// Aqui eu adiciono uma chave calculada a partir do que tem no array $p</span>
          <span style="color: #666666; font-style: italic;">// porém adiciono somente os 5 primeiros caracteres para encurtar a chave</span>
          <span style="color: #666666; font-style: italic;">// esse será o parâmetro responsável por garantir a integridade</span>
          <span style="color: #666666; font-style: italic;">// da informação passada</span>
          <span style="color: #000088;">$p</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_check&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">crypt</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">Link</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #666666; font-style: italic;">// retornamos a URL encriptando a versão codificada em json dela.</span>
         <span style="color: #666666; font-style: italic;">// rootvirtual é a constante que diz qual o root do site,</span>
         <span style="color: #666666; font-style: italic;">// explicarei mais abaixo de onde ela vem</span>
         <span style="color: #b1b100;">return</span> rootvirtual <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;?&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">Encrypt</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
     static <span style="color: #000000; font-weight: bold;">function</span> trataQuery<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #666666; font-style: italic;">// verifica a existência de query-string e adiciona ela na variável $q</span>
          <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
               <span style="color: #666666; font-style: italic;">// decodifica a string</span>
               <span style="color: #000088;">$p</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">Decrypt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #666666; font-style: italic;">// se o retorno for um array, quer dizer que a query é parcialmente válida</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_check&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">// carrega a chave do vetor</span>
                        <span style="color: #000088;">$chave</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$p</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_check&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                        <span style="color: #666666; font-style: italic;">// remove a chave do vetor</span>
                        <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_check&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #666666; font-style: italic;">// recalcula a chave e verifica se é diferente a chave passada</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">crypt</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">Link</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$chave</span><span style="color: #009900;">&#41;</span>
                             <span style="color: #666666; font-style: italic;">// Se for, a requisição eh redirecionada para o index.</span>
                             <span style="color: #990000;">header</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Location: &quot;</span> <span style="color: #339933;">.</span> rootvirtual<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
                             <span style="color: #666666; font-style: italic;">// se for válida é criada a variável global _PAR e o vetor</span>
                             <span style="color: #666666; font-style: italic;">// de parâmetros é jogado nela</span>
                             <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;_PAR&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$p</span><span style="color: #339933;">;</span>
                             <span style="color: #666666; font-style: italic;">// sai da função</span>
                             <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
               <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                     <span style="color: #666666; font-style: italic;">// se não for um vetor, houve modificação da url, e a requisição</span>
                     <span style="color: #666666; font-style: italic;">// é enviada para o index</span>
                     <span style="color: #990000;">header</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Location: &quot;</span> <span style="color: #339933;">.</span> rootvirtual<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               <span style="color: #009900;">&#125;</span>
               <span style="color: #666666; font-style: italic;">// termina a execução e redireciona</span>
               <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Agora vamos para a criação de três arquivos base do site e partir para um exemplo funcional.</p>
<p>o arquivo: includes/config.php irá armazenar as configurações básicas do site:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Root no servidor do site</span>
<span style="color: #990000;">define</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;rootfisico&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/var/www/fw/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Pasta do site no servidor</span>
<span style="color: #990000;">define</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;rootvirtual&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/fw/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// As linhas abaixo são a parte interessante do sistema, pra que usar chaves</span>
<span style="color: #666666; font-style: italic;">// fixas se podemos definidas randomicamente a cada acesso ao sistema?</span>
<span style="color: #666666; font-style: italic;">// assim, uma url usada por uma pessoa só será valida pra ela naquele acesso</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">crypt</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">uniqid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey2&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey2&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">crypt</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">uniqid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">Link</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cryptKey2&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Arquivo: includes/funcoes.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Essa função irá retornar valores de $_POST['var'] ou $_PAR['$var']</span>
<span style="color: #000000; font-weight: bold;">function</span> p<span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$_POST</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_PAR</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_PAR</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_PAR</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Arquivo: includes/inicio.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Definimos o charset e inicializamos a session</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: text/html; charset=UTF-8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">@</span><span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// incluímos as classes e os outros arquivos</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">&quot;funcoes.php&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">&quot;classes/link.php&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">&quot;config.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// agora tratamos a URL atual</span>
<span style="color: #990000;">Link</span><span style="color: #339933;">::</span><span style="color: #004000;">trataQuery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ufs. finalmente chegou a hora, vamos botar o sistema de Links para funcionar e vamos brincar com ele um pouco. vamos criar o arquivo /index.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Exemplo de <span style="color: #990000;">Link</span><span style="color: #339933;">:</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&amp;lt;? echo Link::criaLink('') ?&amp;gt;&quot;</span><span style="color: #339933;">&gt;</span>Página inicial<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&amp;lt;? echo Link::criaLink('usuarios.php', 'id=10') ?&amp;gt;&quot;</span><span style="color: #339933;">&gt;</span>Exemplo <span style="color: #cc66cc;">1</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&amp;lt;? echo Link::criaLink('principal.php') ?&amp;gt;&quot;</span><span style="color: #339933;">&gt;</span>Exemplo <span style="color: #cc66cc;">2</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&amp;lt;? echo Link::criaLink('noticia.php', 'id=10&amp;amp;tipo=ultima&amp;amp;skin=azul') ?&amp;gt;&quot;</span><span style="color: #339933;">&gt;</span>Exemplo <span style="color: #cc66cc;">3</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
&nbsp;
Parabéns<span style="color: #339933;">,</span> a página  foi passada
<span style="color: #339933;">&lt;</span>h2<span style="color: #339933;">&gt;</span>Página Inicial<span style="color: #339933;">&lt;/</span>h2<span style="color: #339933;">&gt;</span>
Nenhuma página passada<span style="color: #339933;">,</span> ou alguem tentou mudar a URL
&nbsp;
Resultados<span style="color: #339933;">:</span>
&nbsp;
<span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;</span>Página<span style="color: #339933;">:&lt;/</span>strong<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;</span>Parametros<span style="color: #339933;">:&lt;/</span>strong<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Bom, é isso. espero que tenha sido bem explicado um exemplo funcional e arquivo para download está aqui: <a href="http://ferrari.eti.br/exemplos/fw1" target="_blank">http://ferrari.eti.br/exemplos/fw1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ferrari.eti.br/links-encriptados-no-php/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Operador XOR no PHP</title>
		<link>http://ferrari.eti.br/operador-xor-no-php/</link>
		<comments>http://ferrari.eti.br/operador-xor-no-php/#comments</comments>
		<pubDate>Wed, 21 May 2008 19:00:59 +0000</pubDate>
		<dc:creator>caferrari</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[criptografia]]></category>

		<guid isPermaLink="false">http://ferrari.eti.br/?p=6</guid>
		<description><![CDATA[Há alguns meses estava precisando criar uma classe de criptografia e quando eu fui desenvolver eu não encontrei nenhuma criptografia veloz o suficiente, até que o Luan me mostrou uma excelente utilização para o XOR. Este operador é muito parecido com o OR, porém a sua leitura é: &#8220;OU um OU outro&#8221; e não &#8220;UM [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses estava precisando criar uma classe de criptografia e quando eu fui desenvolver eu não encontrei nenhuma criptografia veloz o suficiente, até que o <a href="http://luan.eti.br">Luan</a> me mostrou uma excelente utilização para o <a href="http://en.wikipedia.org/wiki/Exclusive_or">XOR</a>. Este operador é muito parecido com o <a href="http://en.wikipedia.org/wiki/Or">OR</a>, porém a sua leitura é: &#8220;OU um OU outro&#8221; e não &#8220;UM ou OUTRO&#8221; como o <a href="http://en.wikipedia.org/wiki/Or">OR</a>. Confira a tabela abaixo exemplificando:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900; font-weight: bold;">false</span> ^ <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span>
<span style="color: #009900; font-weight: bold;">false</span> ^ <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span>
<span style="color: #009900; font-weight: bold;">true</span> ^ <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span>
<span style="color: #009900; font-weight: bold;">true</span> ^ <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span></pre></div></div>

<p>Legal não? só é verdadeiro se os valores forem diferentes.</p>
<p>Como exemplo vamos pegar 2 valores binários, como sendo uma chave e um valor:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">valor<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;11010110&quot;</span>
chave<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;10011101&quot;</span></pre></div></div>

<p>Vamos operar cada bit usando o <a href="http://en.wikipedia.org/wiki/Exclusive_or">XOR</a>, isso irá resultar o binário &#8220;encriptado&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #cc66cc;">11010110</span> ^ <span style="color: #009900;">&#40;</span>valor<span style="color: #009900;">&#41;</span>
<span style="color: #cc66cc;">10011101</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>chave<span style="color: #009900;">&#41;</span>
<span style="color: #208080;">01001011</span>    <span style="color: #009900;">&#40;</span>valor encriptado<span style="color: #009900;">&#41;</span></pre></div></div>

<p>Na terceira linha obtivemos o valor encriptado, só para demonstrar, vamos usar esse valor encriptado e dar um <a href="http://en.wikipedia.org/wiki/Exclusive_or">XOR</a> com a chave novamente.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #208080;">01001011</span> ^ <span style="color: #009900;">&#40;</span>valor encriptado<span style="color: #009900;">&#41;</span>
<span style="color: #cc66cc;">10011101</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>chave<span style="color: #009900;">&#41;</span>
<span style="color: #cc66cc;">11010110</span>   <span style="color: #009900;">&#40;</span>valor novamente<span style="color: #009900;">&#41;</span></pre></div></div>

<p>Não precisa de mais exemplos certo? é uma forma fraca, porém muito veloz de gerar criptografia, e perfeita para usarmos em coisas simples, como a criptografia de URL&#8217;s e <a href="http://en.wikipedia.org/wiki/Salt_%28cryptography%29">Salts</a></p>
<p>Mas não pense que programar isso é complexo, o <a href="http://br.php.net">PHP</a> permite que façamos esse processo usando dois caracteres.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">&quot;a&quot;</span> ^ <span style="color: #0000ff;">&quot;b&quot;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;?&quot;</span><span style="color: #339933;">,</span> logo
<span style="color: #0000ff;">&quot;?&quot;</span> ^ <span style="color: #0000ff;">&quot;b&quot;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;a&quot;</span></pre></div></div>

<p>Com isso vou mostrar uma classe de criptografia extremamente simples:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> <span style="color: #990000;">Crypt</span> <span style="color: #009900;">&#123;</span>
    static <span style="color: #000088;">$chave</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;xy&quot;</span><span style="color: #339933;">;</span>
    static <span style="color: #000000; font-weight: bold;">function</span> StringXor<span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$retorno</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$retorno</span> <span style="color: #339933;">.=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#125;</span> ^ <span style="color: #000088;">$b</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">%</span> <span style="color: #000088;">$j</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">strrev</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$retorno</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    static <span style="color: #000000; font-weight: bold;">function</span> Encrypt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">base64_encode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">StringXor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #339933;">,</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    static <span style="color: #000000; font-weight: bold;">function</span> Decrypt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">StringXor</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">base64_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #000088;">$chave</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O que essa classe faz basicamente é percorrer as strings da chave e do valor passado, calculando para cada caractere o seu valor encriptado, e ao final é codificado usando-se base64 para que não fique com caracteres inválidos na string.</p>
<p>Um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">texto <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;andre&quot;</span>
chave <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;xy&quot;</span>
resultado<span style="color: #339933;">:</span>
a ^ x
n ^ y
d ^ x
r ^ y
e ^ x</pre></div></div>

<p>Código php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">Encrypt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;andre&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Encriptado:&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$b</span> <span style="color: #339933;">=</span> <span style="color: #990000;">Crypt</span><span style="color: #339933;">::</span><span style="color: #004000;">Decrypt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Decriptado: <span style="color: #006699; font-weight: bold;">$b</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Saída:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Encriptado<span style="color: #339933;">:</span> GRccCx0<span style="color: #339933;">=</span>
Decriptado<span style="color: #339933;">:</span> andre</pre></div></div>

<p>é isso, testem, entendam e qualquer coisa pergunte.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrari.eti.br/operador-xor-no-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
