Desenvolvimento - PHP

Tutorial - Criptografando senhas em PHP

Aprenderemos neste tutorial como criptografar senhas usando as funções base64_encode, md5 e crypt.

por Rafael Costa



Artigo atualizado em 28/05/2008.

Resumo:
Aprenderemos neste tutorial como criptografar senhas usando as funções base64_encode, md5 e crypt.

Tutorial:
Uma das grandes perguntas hoje dos desenvolvedores que estão iniciando em PHP é "como esconder a senha dos meus usuários ?".
Se você está desenvolvendo um projeto e precisa de cadastro/login com senha, é recomendável que use senhas criptografadas, pois caso haja invasão em seu banco de dados, não ir expôr as senhas de seus usuários.
Para isso vamos estudar 3 funções que vão nos auxiliar nessa empreitada, lembrando que nenhum método é 100% seguro, afinal, existem hacker"s que invadem até o sistema do Pentágono, não é mesmo ?!
Listarei abaixo as funções e suas respectivas características.

base64_encode
Codifica utilizando a base64. Poderá ser decodificada utilizando base64_decode.

md5
Retorna um hash em uma string de 32 caracteres. Não pode ser decoficada.

crypt
Retornará uma string criptografada usando o algoritmo de encriptação Unix Standard DES-based ou algoritmos alternativos disponíveis no sistema. Não pode ser decodificada.

Exemplos: base64_encode:
<?php
// Variável com a senha guardada
$senha = "mypassword";
$criptografada = base64_encode($senha);
echo $criptografada; // Exibe: bXlwYXNzd29yZA==
?>
Para decodificar, use base64_decode():
<?php
// Variável com a senha guardada
$senha = "mypassword";
$criptografada = base64_encode($senha);
echo $criptografada; // Exibe: bXlwYXNzd29yZA==
echo base64_decode($criptografada); // Exibe: "mypassword"
?>
md5:
<?php
// Variável com a senha guardada
$senha = "mypassword";
$criptografada = md5($senha);
echo $criptografada; // Exibe: 34819d7beeabb9260a5c854bc85b3e44
?>
Não existe função para decodificar md5.

Observação:
Caso você precise fazer uma verificação de senhas, por exemplo, deverá usar este código: if($senhadigitada == md5($senhaguardada)) echo "Login efetuado com sucesso";

crypt:
<?php
// Variável com a senha guardada
$senha = "mypassword";
$criptografada = crypt($senha);
echo $criptografada;
?>
Uma das vantagens da crypt é que, a cada hora que você tentar gerar uma senha nova, o valor retornado será diferente, o que não acontece com md5.

Observação:
Caso você precise fazer uma verificação de senhas, por exemplo, deverá usar este código:

if(crypt($senhadigitada,$senhaguardada)) == $senhaguardada) echo "Login efetuado com sucesso";

Conclusões
Para fechar nosso tutorial, fica aqui uma conclusão do autor:
Reforço a afirmação de que nenhuma destas 3 funções vai tornar seu sistema 100% imune à ações de hackers e afins, mas dificultará bastante.
Cada função tem seu tempo a ser usada, mas atualmente eu usa a crypt para guardar senhas de usuários, pois não existe função para exibir a senha "verdadeira" e a cada hora ele gera uma string diferente.

Espero que tenham gostado do artigo e qualquer dúvida é só postar nos comentários.

Abraços.
Rafael Costa

Rafael Costa - Programador Actionscript há 2 anos. Participante do fórum FlashMasters, maior comunidade Flash do Brasil.
Além de Actionscript, possui conhecimentos em outras linguagens como: JavaScript, CSS, XHTML, PHP e MySQL.
Para saber mais sobre o autor, visite seu site:
http://www.rafaelcosta.com.