<?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>salsotto.com » difundindo ideias na web &#187; PHP</title>
	<atom:link href="http://blog.salsotto.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.salsotto.com</link>
	<description>Quando uma boa ideia acontece e seu comodismo a desperdiça, você estará em dívida contigo e com a humanidade.&#34; ( Ivan Teorilang )</description>
	<lastBuildDate>Mon, 09 Jan 2012 03:01:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Obter a chave de um array identificado no PHP</title>
		<link>http://blog.salsotto.com/2012/01/07/obter-a-chave-de-um-array-identificado-no-php/</link>
		<comments>http://blog.salsotto.com/2012/01/07/obter-a-chave-de-um-array-identificado-no-php/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 03:12:34 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=937</guid>
		<description><![CDATA[Deixo um exemplo bem rápido de como se obter a chave (key) de um ítem de um array. No exemplo abaixo, eu crio primeiramente um array identificado dos campos obrigatórios para validação de um formulário, sendo a primeira casa antes do ponteiro a &#8220;chave&#8221; e a posterior o valor do ítem.
Em seguida, crio um array [...]]]></description>
			<content:encoded><![CDATA[<p>Deixo um exemplo bem rápido de como se obter a chave (<em>key</em>) de um ítem de um array. No exemplo abaixo, eu crio primeiramente um array identificado dos campos obrigatórios para validação de um formulário, sendo a primeira casa antes do ponteiro a &#8220;chave&#8221; e a posterior o valor do ítem.</p>
<p>Em seguida, crio um array chamado &#8220;erros&#8221; para armazenar os possíveis erros. Repare que na linha 07 utilizo a chave como identificado do campo enviado via post (o qual tem o mesmo nome dos <em>names</em> dos inputs). Na linha seguinte, se houve algum erro, ele armazena o valor dentro do array de erros.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #000088;">$camposObrigatorios</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nome'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Nome'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cpf'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'CPF'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #000088;">$erros</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></li><li>&nbsp;</li><li><span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$camposObrigatorios</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$chave</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$valor</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$chave</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: #009900;">&#123;</span>		</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #990000;">array_push</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$erros</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valor</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Vale lembrar que esse exemplo foi usado apenas para ilustrar o conceito de chave e valor de um ítem de array.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2012/01/07/obter-a-chave-de-um-array-identificado-no-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Habilitar o cURL do PHP no Ubuntu</title>
		<link>http://blog.salsotto.com/2012/01/05/habilitar-o-curl-do-php-no-ubuntu/</link>
		<comments>http://blog.salsotto.com/2012/01/05/habilitar-o-curl-do-php-no-ubuntu/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 21:29:38 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=928</guid>
		<description><![CDATA[Em mais um novo projeto, dessa vez trabalhando com o Magento, deparei-me com algumas dependências na hora da instalação no servidor. Uma delas, foi a instalção da biblioteca cURL que é utilizada para acessar conteúdo de sites de terceiros.
Procurando com o search nas dependências, encontrei algumas mais para instalar:
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
]]></description>
			<content:encoded><![CDATA[<p>Em mais um novo projeto, dessa vez trabalhando com o Magento, deparei-me com algumas dependências na hora da instalação no servidor. Uma delas, foi a instalção da biblioteca cURL que é utilizada para acessar conteúdo de sites de terceiros.</p>
<p>Procurando com o <em>search</em> nas dependências, encontrei algumas mais para instalar:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Bash"><div class="devcodeoverflow"><ol><li><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> curl libcurl3 libcurl3-dev php5-curl</li></ol></div></pre><!--END_DEVFMTCODE--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2012/01/05/habilitar-o-curl-do-php-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar o PHP 5 no IIS no Windows 7</title>
		<link>http://blog.salsotto.com/2012/01/03/instalar-o-php-5-no-iis-no-windows-7/</link>
		<comments>http://blog.salsotto.com/2012/01/03/instalar-o-php-5-no-iis-no-windows-7/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 00:18:32 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=906</guid>
		<description><![CDATA[Como primeiro post de 2012 gostaria de deixar uma dica rápida de como instalar no PHP no IIS. Primeiramente habilitaremos o IIS seguindo os passos abaixo:

Acesse o painel de controle
Programas e recursos
Ativar ou desativar recursos do Windows
Selecione a opção &#8220;Serviços de Informações de Internet&#8221; (IIS)
Selecione os recursos que deseja em seu servidor
Finalize no Ok

Depois de [...]]]></description>
			<content:encoded><![CDATA[<p>Como primeiro post de 2012 gostaria de deixar uma dica rápida de como instalar no PHP no IIS. Primeiramente habilitaremos o IIS seguindo os passos abaixo:</p>
<ol>
<li>Acesse o painel de controle</li>
<li>Programas e recursos</li>
<li>Ativar ou desativar recursos do Windows</li>
<li>Selecione a opção &#8220;Serviços de Informações de Internet&#8221; (IIS)</li>
<li>Selecione os recursos que deseja em seu servidor</li>
<li>Finalize no Ok</li>
</ol>
<p>Depois de habilitado o IIS reinicie o computador, e ao reiniciar baixe o executável da <a href="http://www.microsoft.com/web/platform/phponwindows.aspx" target="_blank">Microsoft</a> para instalar o PHP no servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2012/01/03/instalar-o-php-5-no-iis-no-windows-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adicionar ítens ao menu do admin no Wordpress</title>
		<link>http://blog.salsotto.com/2010/01/21/adicionar-itens-ao-menu-do-admin-no-worpress/</link>
		<comments>http://blog.salsotto.com/2010/01/21/adicionar-itens-ao-menu-do-admin-no-worpress/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 02:21:13 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=687</guid>
		<description><![CDATA[Caso necessite criar algo especifico e simples na parte adminstrativa do Wordpress como uma simples pagina que gere um arquivo csv dos assinantes do bloge não queira criar um plugin, basta adicioná-la diretamente ao menu do painel de controle de seu site.
Para isso, acesse a pasta wp-admin e abra o arquivo menu.php, pois será nele [...]]]></description>
			<content:encoded><![CDATA[<p>Caso necessite criar algo especifico e simples na parte adminstrativa do <a title="Wordpress" href="http://wordpress.org/" target="_self">Wordpress</a> como uma simples pagina que gere um arquivo csv dos assinantes do bloge não queira criar um plugin, basta adicioná-la diretamente ao menu do painel de controle de seu site.</p>
<p>Para isso, acesse a pasta wp-admin e abra o arquivo menu.php, pois será nele que realizaremos as alterações para que a nossa página apareça no menu. Com o arquivo aberto, seguindo como exemplo citado acima uma página que gere um arquivo de todos os assinantes do blog, adicionaremos essa página como um submenu de Usuários, assumindo que a nossa página criada chama-se &#8220;csv.php&#8221; e que esteja dentro do diretório wp-admin.</p>
<p>Exemplo:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #000088;">$submenu</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'users.php'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>5<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>__<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Gerar CSV'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'edit_users'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'csv.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
<p>Na linha acima, dizemos que a página csv.php faz parte do array users.php e que será o primeiro da lista caso não haja outro indíce menor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2010/01/21/adicionar-itens-ao-menu-do-admin-no-worpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mudando o idioma do Wordpress</title>
		<link>http://blog.salsotto.com/2010/01/20/mudando-o-idioma-do-wordpress/</link>
		<comments>http://blog.salsotto.com/2010/01/20/mudando-o-idioma-do-wordpress/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 01:00:26 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=681</guid>
		<description><![CDATA[O Wordpress vem por padrão o idioma inglês, que no qual não é nenhum problema creio eu que se for para uso pessoal, mas caso seja para algum cliente ou tenha dificuldades com com esse idioma, basta editar o arquivo wp-config.php que encontra-se na raiz de seu projeto.
Basta modificar a constant WPLANG:&#160;
~&#62; define (”WPLANG”, “”);&#160;&#160;
~&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>O <a title="Wordpress" href="http://wordpress.org/" target="_self">Wordpress</a> vem por padrão o idioma inglês, que no qual não é nenhum problema creio eu que se for para uso pessoal, mas caso seja para algum cliente ou tenha dificuldades com com esse idioma, basta editar o arquivo wp-config.php que encontra-se na raiz de seu projeto.</p>
<p>Basta modificar a constant <strong>WPLANG</strong>:&nbsp;</p>
<p>~&gt; define (”WPLANG”, “”);&nbsp;&nbsp;</p>
<p>~&gt; define (”WPLANG”, “pt_BR”);.</p>
<p>Pronto, agora seu Wordpress está com o idioma português.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2010/01/20/mudando-o-idioma-do-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conversão de tipos de dados em PHP</title>
		<link>http://blog.salsotto.com/2009/12/11/conversao-de-tipos-de-dados-em-php/</link>
		<comments>http://blog.salsotto.com/2009/12/11/conversao-de-tipos-de-dados-em-php/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 00:22:33 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=647</guid>
		<description><![CDATA[A conversão de tipo de dados ou como muitos conhecem como &#8220;casting&#8221; ,&#160; é uma técnica muito eficaz no PHP contra ataques de sql-injection, pois com isso podemos facilmente transformar uma variável do tipo A para o tipo B, sem precisarmos nos preocupar com grandes dificuldade para realizar essa operação.&#160; A fim de proporcionar segurança [...]]]></description>
			<content:encoded><![CDATA[<p>A conversão de tipo de dados ou como muitos conhecem como <strong>&#8220;casting&#8221;</strong> ,&nbsp; é uma técnica muito eficaz no PHP contra ataques de sql-injection, pois com isso podemos facilmente transformar uma variável do tipo A para o tipo B, sem precisarmos nos preocupar com grandes dificuldade para realizar essa operação.&nbsp; A fim de proporcionar segurança extra ou apenas para certificar-se de um tipo de conjunto de dados está sendo usado, essa técnica é frequentemente utilizada por programadores PHP(pelo menos os que eu conheço).</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #000000; font-weight: bold;">&lt;?php</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//string em sua forma normal</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://salsotto.com&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//conversao para um numero inteiro</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #000088;">$string</span><span style="color: #339933;">;</span></li><li><span style="color: #000000; font-weight: bold;">?&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
<p>No exemplo acima vimos um exemplo sem nenhum propósito, mas imagenemos o seguinte, e se essa string obrigatoriamente tivesse que ser um número, como por exemplo o id de um usuario em uma requisição utilizando o método $_GET, deixariamos passar um outro valor que não fosse um número? Pense na master brecha que o seu sistema está dispondo para pessoas mal intencionadas, pois com isso facilmente seu sistema sofrerá um ataque de sql&minus;injection. Para tanto, veremos um outro exemplo:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li> <span style="color: #000000; font-weight: bold;">&lt;?php</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//imaginemos que o valor venha de um $_GET e o valor é 'OR 1=1'</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'OR 1=1'</span> <span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//realizamos a conversao obrigatoria para um numero inteiro</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #000088;">$user</span><span style="color: #339933;">;</span></li><li><span style="color: #000000; font-weight: bold;">?&gt;</span> </li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
<p>Com isso, se alguma pessoa mal intencionada colocar uma string como parâmetro, ela automaticamente será convertida para um número inteiro, onde com isso já previnimos que o nosso sistema não aceite outro valor como parâmetro ao não ser um número inteiro, pois todo número inteiro de uma string é ZERO e assim basta realizarmos uma verificação após o casting.</p>
<p>É importante frisar, que só isso não resolve para a segurança do seu sistema, pois aqui só mostrei como forçar a conversão de tipos de variáveis juntamente imendando com uma dica de segurança.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2009/12/11/conversao-de-tipos-de-dados-em-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Parâmetros opcionais em funções</title>
		<link>http://blog.salsotto.com/2009/12/01/parametros-opcionais-em-funcoes/</link>
		<comments>http://blog.salsotto.com/2009/12/01/parametros-opcionais-em-funcoes/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 00:23:03 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=579</guid>
		<description><![CDATA[Os parâmetros opcionais são utilizados quando não há a necessidade de serem informados na hora da chamada da função, sendo que em sua construção deve-se obrigatoriamente definir um valor padrão para cada parâmetro opcional, pois&#160; esses valores serão utilizados caso não seja passado nenhum parâmetro à função.
/**&#160;* printName&#160;* @param string $name - parametro opcional&#160;*/function printName&#40;$name='Visitante'&#41;&#123;&#160;&#160;&#160;&#160;echo [...]]]></description>
			<content:encoded><![CDATA[<p>Os parâmetros opcionais são utilizados quando não há a necessidade de serem informados na hora da chamada da função, sendo que em sua construção deve-se obrigatoriamente definir um valor padrão para cada parâmetro opcional, pois&nbsp; esses valores serão utilizados caso não seja passado nenhum parâmetro à função.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #009933; font-style: italic;">/**</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* printName</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $name - parametro opcional</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;*/</span></li><li><span style="color: #000000; font-weight: bold;">function</span> printName<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'Visitante'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Seja bem-vindo '</span><span style="color: #339933;">.</span><span style="color: #000088;">$name</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--><br />
No exemplo acima, eu defini o valor padrão como &#8216;Usuário&#8217;, caso não seja passado nenhum parâmetro à função, seu resultado será &#8216;Seja bem-vindo Visitante&#8217;, caso contrário, será o valor passado como parâmetro, ex: &#8216;Seja bem-vindo Salsotto&#8217;.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #009933; font-style: italic;">/**</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* printName</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $string</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $name - parametro opcional</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;*/</span></li><li><span style="color: #000000; font-weight: bold;">function</span> printName<span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'Salsotto'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$string</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">.</span><span style="color: #000088;">$name</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--><br />
É importante frisar que os últimos parâmetros que devem ser os opcionais, no caso de mais de um parâmetro, caso contrário sua função não funcionará.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2009/12/01/parametros-opcionais-em-funcoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classes de caracteres em Expressões Regulares</title>
		<link>http://blog.salsotto.com/2009/11/19/classes-de-caracteres-em-expressoes-regulares/</link>
		<comments>http://blog.salsotto.com/2009/11/19/classes-de-caracteres-em-expressoes-regulares/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 16:18:29 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=531</guid>
		<description><![CDATA[A língua brasileira é rica em caractecteres acentuados, e isso é uma questão que os metacaracteres não tratam especificamente quando necessário criar expressões regulares, sendo necessário utilizar de um meio alternativo,&#160; que nada mais&#160; são do que as classes de caracteres providas pelo padrão POSIX.
O POSIX é um padrão internacional que  define normas para [...]]]></description>
			<content:encoded><![CDATA[<p>A língua brasileira é rica em caractecteres acentuados, e isso é uma questão que os metacaracteres não tratam especificamente quando necessário criar expressões regulares, sendo necessário utilizar de um meio alternativo,&nbsp; que nada mais&nbsp; são do que as classes de caracteres providas pelo padrão POSIX.</p>
<p>O POSIX é um padrão internacional que  define normas para garantir a portabilidade do código-fonte de um programa a partir de um sistema operacional. Hã!?&nbsp; Deixe-me tentar explicar de uma outra forma já utilizando as classes.</p>
<p>O uso das classes de caracteres&nbsp; levam em conta  a localidade do sistema operacional, seguindo algumas premissas como o idioma utilizado no sistema operacional, e isso só ocorre porque o padrão POSIX da suporte a portabilidade de idiomas.</p>
<h2>Lista de classes:</h2>
<ul>
<li><strong>[:digit:]&nbsp; </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em>Dígitos de 0 até 9</em></li>
<li><strong>[:alnum:]</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em>Caracteres alfanuméricos de 0 até 9 ou A até Z ou a até z.</em></li>
<li><strong>[:alpha:]&nbsp;&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em>Caracteres alfabéticos de A até Z ou a até z.</em></li>
<li><strong>[:blank:]&nbsp; &nbsp;</strong> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <em>Caracteres de espaço e tabulação.</em></li>
<li><strong>[:xdigit:]&nbsp;</strong>&nbsp;&nbsp;<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dígitos hexadecimais</em></li>
<li><strong>[:punct:]</strong>&nbsp;&nbsp;&nbsp;<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Símbolos de pontuação . , &#8221; &#8216; ? ! ; :</em></li>
<li><strong>[:print:]&nbsp;&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em>Todos os caracteres que podem ser impressos.</em></li>
<li><strong>[:space:]</strong>&nbsp;&nbsp;&nbsp;<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caracteres de espaço.</em></li>
<li><strong>[:graph:]&nbsp;</strong> &nbsp;&nbsp; <em>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Todos os caracteres impressos, menos espaço.</em></li>
<li><strong>[:upper:]</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <em>Caracteres alfabéticos maiúsculos de A até Z.</em></li>
<li><strong>[:lower:]&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>&nbsp; &nbsp; &nbsp;&nbsp; Caracteres minúsculos de a até z.</em></li>
<li><strong>[:cntrl:]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>&nbsp; &nbsp; &nbsp; <em>Caracteres de control.</em></li>
</ul>
<h2>Exemplo</h2>
<p>Imaginemos que utilizariamos a classe [:lower:] em um sistema operacional com o idioma em inglês, isso não seria de muito uso para expressões regulares com caracteres acentuados, sendo que a classe seria equivalente a [a-z]. Agora utilizando a mesma classe [:lower:] com idioma em português, teriamos o equivalente a [a-záãâàêéóúçõ...]. Um fato observável é que isso serve para as outras classes de caracteres. (<a title="Lista de Metacaracteres" href="http://blog.salsotto.com/2009/11/08/um-pouquinho-sobre-expressoes-regulares/" target="_blank">lista de metacaracteres</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2009/11/19/classes-de-caracteres-em-expressoes-regulares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Renomeando arquivos de um diretório com PHP</title>
		<link>http://blog.salsotto.com/2009/11/16/renomeando-arquivos-de-um-diretorio-com-php/</link>
		<comments>http://blog.salsotto.com/2009/11/16/renomeando-arquivos-de-um-diretorio-com-php/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 13:25:24 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=505</guid>
		<description><![CDATA[É uma ideia simples para renomear arquivos que criei em uma necessidade de um trabalho da disciplina de Computação Gráfica, onde tive que gerar 1200 imagens para gerar um vídeo posteriormente. O uso foi exatamente para renomear todas essas imagens.
Espero que seja útil para alguém! ;D
&#60;?php/**&#160;* renomeia_arquivos&#160;* @param string $diretorio &#160;* @param string $prefixo&#160;* @param [...]]]></description>
			<content:encoded><![CDATA[<p>É uma ideia simples para renomear arquivos que criei em uma necessidade de um trabalho da disciplina de Computação Gráfica, onde tive que gerar 1200 imagens para gerar um vídeo posteriormente. O uso foi exatamente para renomear todas essas imagens.</p>
<p>Espero que seja útil para alguém! ;D</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #000000; font-weight: bold;">&lt;?php</span></li><li><span style="color: #009933; font-style: italic;">/**</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* renomeia_arquivos</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $diretorio </span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $prefixo</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;* @param string $ordem</span></li><li><span style="color: #009933; font-style: italic;">&nbsp;*/</span></li><li><span style="color: #000000; font-weight: bold;">function</span> renomeia_arquivos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$diretorio</span><span style="color: #339933;">,</span> <span style="color: #000088;">$prefixo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ordem</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>	</li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #666666; font-style: italic;">//lista os arquivos que estão no diretório</span></li><li>&nbsp;&nbsp; <span style="color: #000088;">$arquivos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$diretorio</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	</li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #666666; font-style: italic;">//retira indices desnecessarios </span></li><li>&nbsp;&nbsp; <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	</li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ordem</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//reoordena em ordem decrescente</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #990000;">rsort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #666666; font-style: italic;">//reoordena em ordem ascendente</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$indice</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$arquivo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>		</li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//pega a extensao do arquivo</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$extensao</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array_pop</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$arquivo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//gera o novo nome do arquivo</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000088;">$novo_nome</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$prefixo</span><span style="color: #339933;">.</span><span style="color: #000088;">$indice</span><span style="color: #339933;">.</span><span style="color: #000088;">$extensao</span><span style="color: #339933;">;</span>	</li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//renomeia o arquivo</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #990000;">rename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$diretorio</span><span style="color: #339933;">.</span><span style="color: #000088;">$arquivo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$diretorio</span><span style="color: #339933;">.</span><span style="color: #000088;">$novo_nome</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			</li><li>&nbsp;&nbsp; <span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">?&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2009/11/16/renomeando-arquivos-de-um-diretorio-com-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criptografia de senhas com segurança utilizando Sha1</title>
		<link>http://blog.salsotto.com/2009/11/04/criptografia-de-senhas-com-seguranca-utilizando-sha1/</link>
		<comments>http://blog.salsotto.com/2009/11/04/criptografia-de-senhas-com-seguranca-utilizando-sha1/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 18:11:36 +0000</pubDate>
		<dc:creator>Salsotto</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.salsotto.com/?p=389</guid>
		<description><![CDATA[Senhas Irreversíveis
Quando trabalhamos com certos tipos de dados é aconselhável sempre proteger e criptografar antes de inserir essas informações em nossa base de dados, como o que veremos aqui neste post, as senhas. A criptografia de senhas é bastante usada tendo em vista a segurança do sistema e de seus usuários, já que somente a [...]]]></description>
			<content:encoded><![CDATA[<h2>Senhas Irreversíveis</h2>
<p>Quando trabalhamos com certos tipos de dados é aconselhável sempre proteger e criptografar antes de inserir essas informações em nossa base de dados, como o que veremos aqui neste post, as senhas. A criptografia de senhas é bastante usada tendo em vista a segurança do sistema e de seus usuários, já que somente a pessoa que cadastrou a senha terá acesso a mesma, pois as melhores técnicas para criptografias de dados como as senhas são as de mão única(one-way), onde você apenas codifica o texto em um hash de caracteres irreversivel.</p>
<h2>O que é Sha1?</h2>
<p>Este algoritmo recebe como entrada um documento qualquer sob a forma digital com um tamanho de até 2 elevado a 64 bits, e gera como saída um hash de 160 bits, sendo um pouco mais lento que a chave de criptografia MD5, mas em compensação mais difícil de ser quebrado.</p>
<h2>Ataque de Dicionários</h2>
<p>Basea-se em um ataque em senhas que consiste na criptografia das palavras de um dicionário e posteriormente a comparação com as senhas dos usuários do sistema, desse modo mesmo que sua senha esteja guardada com uma chave de criptografia de mão única como o Sha1, há uma grande possibilidade de sua senha ser descoberta com esse ataque, pois o hash gerado como saída de uma string sempre será o mesmo, como por exemplo a palavra <strong>&#8217;salsotto&#8217;</strong> que sempre que for gerado um hash criptografado dessa palavra sempre será o mesmo, para posteriormente poder realizar a comparação desse hash.</p>
<p>A comparação entre tentativas&nbsp; senhas criptografadas através de um ataque de dicionário e as senhas 	previamente armazenadas no banco de dados, seriam facilmente identificadas caso a comparação dos dois hashs criptografados forem iguais.</p>
<h2>Melhorando a segurança de seu sistema</h2>
<p>Para garantir que as senhas não sejam descobertas tão facilmente, utilizaremos um valor aleatório(<strong>salt</strong>) juntamente com a senha criptografada, garantindo que se o seu sistema sofra um ataque de dicionários, ele se mostrará muito eficiente contra esse ataque ou qualquer outro tipo de ataque.</p>
<h2>Exemplo teórico</h2>
<p>Para uso de exemplo teórico, trabalharemos com a palavra &#8216;criptografia&#8217; sendo a nossa <strong>senha</strong>, e adicionaremos o <strong>salt</strong> ao final da mesma,&nbsp; sendo que valor do salt seja criado aleatoriamente, assumiremos que o nosso seja &#8216;xa23d8eq&#8217; e&nbsp; aplicaremos a chave de criptografia sha1, respectivamente gerando como resultado um hash de 160bits que foi exatamente esse &#8216;7c2b646d3e5466d14f1873b2883c730c28c9d5d3&#8242;. Agora já com o hash e o salt em mãos, só nos falta um <strong>valor separador</strong>, que no nosso caso será &#8216;:&#8217; desse modo obtemos a seguinte fórmula:</p>
<ul>
<li> [ sha1(senha + salt aleatório) + valor separador + salt aleatório]</li>
<li>7c2b646d3e5466d14f1873b2883c730c28c9d5d3<strong>:</strong>xa23d8eq</li>
</ul>
<p>Com essa breve introdução com o nosso exemplo, mostrarei agora como criar, armazenar e validar senhas criptografadas com sha1, mas primeiramente será necessário que veja uma função em um post anterior <a title="Criando senhas dinâmicas com PHP" href="http://blog.salsotto.com/2009/10/30/criando-senhas-dinamicas-com-php/" target="_blank">Criando senhas dinâmicas com PHP</a>, pois utilizaremos ela para essa tarefa.</p>
<h2>Mãos na massa</h2>
<p>Assumindo que criaremos senhas&nbsp; e caracteres randômicos utilizaremos da mesma função para essas atividades, pois em si a função <strong>senhaRandomica</strong> gera uma string totalmente aleatória, sendo totalmente versátil para as duas tarefas.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #666666; font-style: italic;">//gera senha randomica com 8 caracteres</span></li><li><span style="color: #000088;">$senha</span> <span style="color: #339933;">=</span> senhaRandomica<span style="color: #009900;">&#40;</span>8<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//gera 6 caracteres randomicos</span></li><li><span style="color: #000088;">$chars_aleatorios</span> <span style="color: #339933;">=</span> senhaRandomica<span style="color: #009900;">&#40;</span>6<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//criptografa a senha com sha1</span></li><li><span style="color: #000088;">$senha_criptografada</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sha1</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$senha</span><span style="color: #339933;">.</span><span style="color: #000088;">$chars_aleatorios</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$chars_aleatorios</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
<p>Com essa etapa concluída já podemos armazenar em nosso banco de dados a nossa senha criptografada(não mostrarei como gravar a senha criptografada em nosso banco de dados, pois é simplesmente gravar em um campo do tipo string).</p>
<p>Na validação das senhas é onde devemos prestar mais atenção para entender como será o processo quando for enviado uma tentativa de acesso ao sistema(para o exemplo abaixo, pressuponho que você já tenha um arquivo de conexão com o banco de dados e que faça devidamente a validação dos dados enviados pelo usuário).</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><ol><li><span style="color: #666666; font-style: italic;">//login do usuario</span></li><li><span style="color: #000088;">$email</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;email&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//senha do usuario</span></li><li><span style="color: #000088;">$senha</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;senha&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//sql para busca usuario atraves do email</span></li><li><span style="color: #000088;">$sql_busca_usuario</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT * FROM user WHERE email='<span style="color: #006699; font-weight: bold;">$email</span>'&quot;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//executa a query passada</span></li><li><span style="color: #000088;">$busca_usuario</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql_busca_usuario</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//conta o numero de registros encontrados</span></li><li><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">mysql_num_rows</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$busca_usuario</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//erro</span></li><li><span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//guarda os dados do usuario</span></li><li><span style="color: #000088;">$dados_usuario</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$busca_usuario</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//separa a senha armazenada no banco através do valor separador</span></li><li><span style="color: #000088;">$senha_criptografada</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;:&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$dados_usuario</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;senha&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">//se a senha enviada for igual a armazenada, senha correta</span></li><li><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">sha1</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$senha</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$senha_criptografada</span><span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$senha_criptografada</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//senha correta</span></li><li><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">//senha incorreta</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>&nbsp;</p>
<p>No exemplo acima, é demonstrado dois dados provenientes de uma requisição de um formulário de login(linhas 02 e 05), sendo que o login é o e-mail do próprio usuário e a sua respectiva senha. Em cima dessas duas informações trabalharemos a validação de acesso em noso sistema.</p>
<p>Primeiramente verificaremos se o usuário existe em nossa base de dados, executando uma query de busca a partir do e-mail enviado pelo usuário, caso esse e-mail seja encontrado retornaremos a senha armazenada para o sistema continuar a validação. Agora para verificarmos se as senhas são iguais, separaremos a senha retornada do banco de dados através do valor separador que haviamos definido antes(linha 22) separando o hash do salt, e assim realizaremos a comparação da seguinte forma, pegaremos a senha enviada pelo usuário pelo formulário mais o salt que guardamos da separação realizada anteriormente e aplicaremos a chave de criptografia sha1 em cima da união dessas duas variaveis (senha enviada pelo formulario + salt separado do hash armazenado no banco) e compararemos com o hash que obtivemos pela separação do hash armazenado no banco para ver se são iguais.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salsotto.com/2009/11/04/criptografia-de-senhas-com-seguranca-utilizando-sha1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

