Pare de criptografar senhas com md5 _

Criptografando strings com MD5: Por quê você NÃO deve fazer isto.
Criptografando strings com MD5: Por quê você NÃO deve fazer isto.

por João Oliveira

Sou programador freelancer e empresário há mais de 15 anos. Já trabalhei em mais de 1000 projetos diferentes em PHP, Node, Python, HTML, CSS e Javascript. Tenho clientes na Alemanha, no Peru e é claro, no Brasil.

É comum encontrar na internet cursos de PHP e MySQL que incentivam a utilização da função md5 como opção viável para a criptografia de senhas. Na maioria dos casos, o instrutor sabe que isso não deve ser feito em ambientes de produção (quando o seu site está no ar, funcionando) mas o faz como medida educacional para simplificar o entendimento do conceito final: senhas devem ser criptografadas antes de serem salvas (no caso de um vazamento ou hack os atacantes não consigam visualizá-las).

Ok. Mas por que não usar o MD5, se ele cumpre essa função?

MD5 é rápido demais

Ué, mas isso não é bom? Nesse caso não. O motivo é que ao mesmo tempo que você consegue criptografar uma string rapidamente, os hackers também. Logo, um ataque de força bruta pode calcular milhões de combinações possíveis e tentar cada uma até acertar.

MD5 não é collision-resistant

Resumindo: é possível que duas strings diferentes produzam o mesmo hash md5. Se você tem, por exemplo, um certificado SSL assim criptografado, alguém poderia criar uma cópia com conteúdo diferente e injetá-la na sua aplicação.

Existem vários bancos de dados de senhas MD5 na internet

Quebrando a criptografia md5 usando sites do Google
Quebrando a criptografia md5 usando sites do Google

Uma pesquisa no Google usando o termo “md5 decrypt” vai te levar à milhares de sites (como esse) onde você digita uma hash md5 e eles te dizem qual a palavra que a produziu. Ou seja, você não precisa ser um grande especialista pra quebrar a segurança.

Quando usar MD5?

Isso depende muito do tipo de aplicação que você costuma construir, mas na maioria dos casos, a melhor aplicação da criptografia MD5 é na verificação da integridade de arquivos.

Exemplo: sua aplicação precisa enviar um arquivo dividido em várias partes de um servidor para o outro. Depois de juntar as partes do arquivo no novo hospedeiro, como saber se nenhuma parte está faltando ou foi alterada no caminho? Bom, se o arquivo original criptografado produz a mesma hash md5 que o novo arquivo Frankenstein, então eles são iguais. Simples assim!

Se não md5, o que usar então?

Bom, gravei um vídeo tutorial explicando o passo a passo de como criptografar senhas de maneira segura usando PHP. Segue: