Gera um hash com salt aleatório - senha criptografada

Postado por Paulo Brito em 18 de Novembro de 2009  •  Comentários (0)  • 

Muitas vezes guardamos as senhas de forma criptografada em um banco de dados usando apenas a função md5() ou sha1() e pensamos que nossa senha está segura.

Se por exemplo você criptografar a palava "teste" ela sempre irá gerar um mesmo hash. Ou seja, se eu conhecer qual hash equivale a palavra "teste" eu saberei sua senha. Teste executando o seguinte comando: <?php echo md5("teste"); ?>
Que vai retornar: 698dc19d489c4e4db73e28a713eab07b

Por esse motivo que você pode se deparar na internet com algum site que dizem "quebrar" suas senhas criptografadas, como por exemplo: http://md5crack.com/crackmd5.php

Esse tipo de site utiliza as chamadas rainbow tables que nada mais é que várias strings que são transformadas em md5, então eles relacionam essas string com seus respectivos hashs.

Então se você colocar esse hash: "698dc19d489c4e4db73e28a713eab07b" ele vai te retornar "teste".

Então como fariamos para guardar de forma segura uma senha? Utilizando um SALT.
O Salt seria uma string aleatória que você poderia adicionar no começo ou no final do texto.

Ou seja, quando você quiser guardar a senha "teste", na verdade você iria adicionar o salt na frente da senha, dessa forma ficaria algo como:
"as6@*()$teste"
O hash correspondente seria: 3d0e33a96bd503b6d556b7a53f5820f8

Se você tentar utilizar o site para "quebrar" o hash, vai verificar que não foi possível encontrar esse hash, porque ninguém ainda relacionou esse hash com a string "as6@*()$teste".

Agora você pergunta: "Ok, eu entendi essa parte, mas como eu ia verificar se a senha que o cara digitou é a correta?"

É importante você salvar também o SALT no seu banco de dados, não se preocupe que o SALT seja visto como plain/text. Agora para verificar se aquele usuário colocou uma senha válida você faz os seguintes passos:

1. Verifica apenas o nome do usuário, caso ele exista pegue o SALT que você salvou no banco de dados, lembre que ele ta em formato de texto puro.

2. Adicione o SALT na senha que foi passada por ele no formulário.
Exemplo: A senha digitada foi "senha" e o salt que tava salvo no banco era "as6@*()$"

3. Vamos comparar os dois hashs mas agora vamos fazer da seguinte forma, vamos concatenar o SALT e a senha digitada, dessa forma temos: "as6@*()$senha"

4. Agora vamos comparar o hash gerado com aquele salvo no banco de dados, caso sejam iguais a senha está correta!

Parece muito complicado no início mas o código está bem comentando, então acho que você não terá dificuldade.


  • Download
  • Código fonte
  • Comentar
  • Comentários
blog comments powered by Disqus

Comentários ir para topo

Código fonte ir para topo