Todos os três são criptografias de alto nível que geram strings de 128 caracteres com chances absurdamente remotas de colisão. Todos os três são criptografias de mão única, ou seja, a única coisa que pode fazer com a string depois de criptografada é comparar com outra string para ver as duas são iguais… Não há como “descriptografar” a string gerada por esses algoritmos.
Para usar esses métodos de encriptação precisará usar a função hash( ) do PHP.
SHA-512
O SHA-512 é a versão melhorada do SHA-265, que por sua vez é uma versão muito melhor do SHA-1. Para encriptar uma string usando SHA-512, no PHP, pode fazer assim:
1 <?php
2
3 $string = ‘O rato reu a ropa do rei de Roma’;
4 $codificada = hash(‘sha512’, $string);
5
6 echo “Resultado da codificação usando sha512: ” . $codificada;
7
8 ?>
Ao executar o código acima verá uma string de 128 caracteres, é essa string que deve salvar no banco de dados para manter a senha realmente segura. O resultado dessa encriptação com SHA-512 é algo assim (quebrei em três linhas para ficar “legível):
3b1efb1934a56460904a2ae4782490d06057985a1524
5bb887ed4cda89e82cfa3c4ab2589686cb1828228c8e
6d252aa5272cbf1b1ec44978e302d5f7b7cd4641
Whirlpool
O Whirlpool é um pouco mais lento que o SHA-512 e, consequentemente, mais “entrópico”, ou seja: mais seguro. Para encriptar uma string usando Whirlpool, no PHP, pode ser feito:
1 <?php
2
3 $string = ‘O rato reu a ropa do rei de Roma’;
4 $codificada = hash(‘whirlpool’, $string);
5
6 echo “Resultado da codificação usando whirlpool: ” . $codificada;
7
8 ?>
O resultado desse Whirlpool será algo assim:
f13697ecb3e10789449ed839f224376b633eadbe3739
c07c7843bf91a86f4374d3697924e3c396cfeb777b56
d38700c41e032c21c4fce52d5f59024969536c74
Salsa20
E por fim, mas tão poderoso quanto, o Salsa20 é outro algoritmo de encriptação que irá gerar 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.
Para encriptar uma string usando Salsa20, no PHP, pode fazer assim:
1 <?php
2
3 $string = ‘O rato reu a ropa do rei de Roma’;
4 $codificada = hash(‘salsa20’, $string);
5
6 echo “Resultado da codificação usando salsa20: ” . $codificada;
7
8 ?>
O resultado desse Salsa20 será algo assim:
56a296fad140971d0fcd1577bd0c66348e69a835e9f4
56857a0e9f43e8fe540ad4488099875daaf8741df89f9
6abb8c6cd08ed842db33b2ea356737fc2cb0aef
Salvando esses dados no banco de dados
Para salvar esse tipo de dado [criptografado] você pode usar um campo CHAR(128) pois sabemos que sempre teremos 128 caracteres ali.
Encontrando registros criptografados no banco de dados
Suponhamos que você queira encontrar um usuário no seu banco de dados comparando a senha digitada (no formulário de login) com a senha armazenada utilizando o método Whirlpool. O código PHP para montar a consulta SQL seria mais ou menos assim:
01 <?php
02
03 $usuario = ‘thiago’; // Nome do usuario (digitado pelo usuario)
04 $senha = ‘12345’; // Senha (digitada pelo usuario)
05
06 // Encripta a senha utilizando Whirlpool
07 $whirlpool = hash(‘whirlpool’, $senha);
08
09 $sql = “SELECT * FROM `usuarios` WHERE `usuario` = ‘{$usuario}’ AND BINARY `senha` = ‘{$whirlpool}'”;
10
11 ?>
Artigo originalmente publicado em 24 de setembro de 2010 por Thiago Belem: Criptografia no PHP usando Sha512, Whirlpool e Salsa20