A final de contas MD5 é ou não descriptografável

Senhores,
Sou programador a um bom tempo, mesmos antes de existir sha1 lembro que fazer equações matemáticas para criptografar e descriptografar um valor x. Só que lendo sobre MD5 a descrição diz que é uma criptografia de rash unidirecional. Pergunto: se é unidirecional porque tem tanto sistema de exemplo que criptografa e descriptografa textos com determinada chave?. Ou seja, se é unidirecional não deveria ter como se chegar ao valor original criptografado.

Ex: http://www.md5decrypt.org/

Esse tipo de site ai amigo ele testa a string que voce colocar com as que ele possui no banco de dados.

Por exemplo, gera um hash dessa string: “2aK()@###$&@/!laks…,” e veja se ele consegui descriptografar… hehe

Abraços

Muito cuidado com as experiências que fazem nesse site porque se a encriptação é feita lá, ele adiciona automaticamente a palavra ao seu dicionário de passwords conhecidas.

Sim é unidirecional.
Não, não há como reverter.
Não, os sites deste tipo não descriptografam. Eles apenas usam o valor que você inseriu como chave na busca por um resultado conhecido. Se não é conhecido, eles armazenam em um banco de dados, até que alguém insira uma chave que coincida com este valor.

Alguns conceitos: MD5 e os algoritmos de hash unidirecional não utilizam “chave” e na teoria não deveriam ser chamados de algoritmos de criptografia. Estes algoritmos nada mais são que uma “função matemática unidirecional”, ou seja de uma entrada qualquer gera-se uma saída que matematicamente não é possível saber qual era a entrada. Como a entrada pode ter tamanho variável e a saída tem tamanho fixo, de entradas diferentes pode-se gerar a mesma saída.

Em termos computacionais, o que se faz é usar “força bruta” para descobrir qual era a entrada a partir de uma saída: testa-se várias entradas até obter a mesma saída. Ou seja por este método não existe 100% de certeza que a senha original era a entrada encontrada, mas para efeito de “quebra de segurança” isto é suficiente.

Qualquer algoritmo de hash unidirecional acaba se tornando obsoleto com o aumento da capacidade de processamento dos computadores. Ou seja, leva-se cada vez menos tempo até alguém descobrir uma senha. Por isso que o MD5 já não é recomendado.

[edit] Putz! o drsmachado respondeu antes… :)[/edit]

[quote=moises.j.miranda]Senhores,
Sou programador a um bom tempo, mesmos antes de existir sha1 lembro que fazer equações matemáticas para criptografar e descriptografar um valor x. Só que lendo sobre MD5 a descrição diz que é uma criptografia de rash unidirecional. Pergunto: se é unidirecional porque tem tanto sistema de exemplo que criptografa e descriptografa textos com determinada chave?. Ou seja, se é unidirecional não deveria ter como se chegar ao valor original criptografado.

Ex: http://www.md5decrypt.org/

[/quote]

A diferença entre um hash e um algoritmo de criptografia é a mesma que existe entre uma impressão digital e uma molécula de DNA.

A impressão digital pode ser encontrada em um banco de dados da polícia, mas não pode ser usada para reconstruir o corpo do suspeito.

A molécula de DNA também pode ser usada para identiicar um suspeito, mas ela poderia ser usada para clonar (reconstruir o corpo) do suspeito.

Bom, como falaram aí, md5 não é reversível, mas o principal problema que leva o md5 a não ser recomendado hjoje em dia são as colisões conhecidas. Uma colisão é quando duas entradas distintas geram o mesmo hash.

Procure por Rainbow Table, que é uma técnica de força bruta que reduz drasticamente o esforço para se reverter um hash.

Tem até software para usar a técnica:
http://ophcrack.sourceforge.net/
http://project-rainbowcrack.com/

Se for MD5 puro, sem Salt, é até bem fácil reverter - e não só MD5, mas outros hashes também. No caso do MD5, pode-se encontrar no google a palavra original ou uma equivalente simplesmente colocando-se o hash na busca.

Tem esse ótimo site que explica como usar o MessageDigest do Java com Salt de maneira bem mais segura:
https://www.owasp.org/index.php/Hashing_Java