Autenticação e criptografia de senhas usando PHP

Publicado por Renan Martins Pimentel em 20/12/2011

[ Hits: 9.965 ]

Blog: http://www.renanmpimentel.com.br

 


Autenticação e criptografia de senhas usando PHP



Antes de começar a falar de como usarmos a criptografia com PHP, vamos tentar entender um pouco como tudo isso funciona:

"Criptografia é o ato de codificar dados em informações aparentemente sem sentido, para que pessoas não consigam ter acesso às informações que foram cifradas. Há vários usos para a criptografia em nosso dia a dia: proteger documentos secretos, transmitir informações confidenciais pela Internet ou por uma rede local, etc.

O método de criptografia mais difundido utiliza a técnica de chave pública/chave privada. A criptografia é uma fórmula matemática, fórmula essa que gera duas chaves, uma pública e outra privada (ou secreta).

A chave pública, que qualquer pessoa pode saber, é usada para criptografar os dados. Já a chave privada, que só o destinatário dos dados conhece, é usada para descriptografar os dados, ou seja, "abrir" os dados que ficaram aparentemente sem sentido.

O interessante dessa jogada é que a partir da chave pública é impossível descriptografar os dados nem tampouco deduzir qual é a chave privada. (...)"

Para ver todo o artigo, clique aqui:
Hoje em dia, é muito comum que sistemas de informações utilizem um mecanismo de autenticação para acesso a áreas restritas através de um login e senha. Por questões de confidencialidade e segurança, é comum, que as senhas fiquem guardadas de forma criptografada no banco de dados.

Geralmente os algoritmos de criptografia usados para estes casos, são aqueles de via única (unidirecional), ou seja, que não permitem que um valor codificado seja descriptografado facilmente. O nome dado a um valor criptografado é "hash".

Vejamos quais as principais funções de criptografia

MD5 - Gera uma sequência binária de 16 bytes (ou 32 símbolos hexadecimais)

//Exemplo de md5 $str_md5 = "Aqui vai um texto qualquer"; $codificacao_md5 = md5($str_md5); echo "Aqui está o resultado: ". $codificacao_md5; //fc93f1cd1f0296bd4bfd8950c5c57b1d


sha1 - Gera uma sequência binária de 20 bytes (ou 40 símbolos hexadecimais)

//Exemplo de sha1 $str_sha1 = "Aqui vai um texto qualquer"; $codificacao_sha1 = sha1($str_sha1); echo "Aqui está o resultado: ". $codificacao_sha1; //8e25eab2f0c4326bdb34f5d4795a05aa854d340a


base64 - Uma codificação de mão dupla.

//Exemplo de base64 $str_base64 = "Aqui vai um texto qualquer"; $codificacao_base64= base64_encode($str_base64); echo "Aqui está o resultado: ". $codificacao_base64; echo "<br /><br />"; $original= base64_decode($codificacao_base64); echo "Aqui volta o texto original: "."$original"; //Aqui vai um texto qualquer


SHA-512 - Versão melhorada do SHA-265, que por sua vez é uma versão muito melhor do SHA-1.

//Exemplo de SHA-512 $str_sha512 = "Aqui vai um texto qualquer"; $codificacao_sha512 = hash('sha512', $str_sha512); echo "Aqui está o resultado: ". $codificacao_sha512; /* Quebrei em algumas linhas para ficar legivel 827fcdea74dbb2a079b0b93433d87c602 1111a61ce78e7b81c23985290b135ff64910a1f68fd801 378bd28d8f2db24b241a48075b1c1d2aff039468bd576a195 */


Whirlpool - Mais lento que o SHA-512 e, consequentemente, mais "entrópico", ou seja: mais seguro.

//Exemplo de Whirlpool $str_Whirlpool = "Aqui vai um texto qualquer"; $codificacao_Whirlpool = hash('whirlpool', $str_sha512); echo "Aqui está o resultado: ". $codificacao_Whirlpool; /* Quebrei em algumas linhas para ficar legível d2276094e7e3b11ce53ec83a753c4ca855eacd6 cee7cb5d3677081c0625a435abb4b5bb3ae7cc447 b0219d927c47fb96d21a1fe3a79e216dd22bb4633fac73f9 */


Salsa20 - Gera uma string de 128 caracteres. O Salsa20 foi criado para encriptação de stremings/transmissões, mas pode ser usado com strings simples também.

//Exemplo de Salsa20 $str_Salsa20 = "Aqui vai um texto qualquer"; $codificacao_Salsa20 = hash('salsa20', $str_Salsa20); echo "Aqui está o resultado: ". $codificacao_Salsa20; /* Quebrei em algumas linhas para ficar legível 0014b06af587198213034b4051268af73769521 fc2e6a029d5dc9bec350b537d241e66ae597692c35ff7c5410b 01c4fec8b48359c2e692202cc6c70d90b6588a */


Em um próximo tutorial, vou mostrar como usar isso na prática.

Previamente publicado em:
Abraços!

Outras dicas deste autor

Cadastrar eventos/compromissos no Google Agenda com cURL [PHP]

Verificar se o CPF é válido

Mostrar a previsão do tempo com PHP

Upload de várias imagens com PHP e jQuery

Fullscreen com jQuery e CSS

Leitura recomendada

Estrutura de recuo PHP/Apache para não acessarem arquivos pela URI (barra de endereços)

PhpSecInfo - relatório de segurança de seu ambiente PHP

Criptografia de senha com PHP

Zoneminder com acesso restrito por usuário não mostra imagem da câmera de vídeo

Verificando upload de arquivos no Linux com phpMussel

  

Comentários
[1] Comentário enviado por chroda em 26/12/2011 - 17:27h

Todos os Hashs do PHP
[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha224
[5] => sha256
[6] => sha384
[7] => sha512
[8] => ripemd128
[9] => ripemd160
[10] => ripemd256
[11] => ripemd320
[12] => whirlpool
[13] => tiger128,3
[14] => tiger160,3
[15] => tiger192,3
[16] => tiger128,4
[17] => tiger160,4
[18] => tiger192,4
[19] => snefru
[20] => snefru256
[21] => gost
[22] => adler32
[23] => crc32
[24] => crc32b
[25] => salsa10
[26] => salsa20
[27] => haval128,3
[28] => haval160,3
[29] => haval192,3
[30] => haval224,3
[31] => haval256,3
[32] => haval128,4
[33] => haval160,4
[34] => haval192,4
[35] => haval224,4
[36] => haval256,4
[37] => haval128,5
[38] => haval160,5
[39] => haval192,5
[40] => haval224,5
[41] => haval256,5

[2] Comentário enviado por renanmpimentel em 26/12/2011 - 17:33h

Muito bem observado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts