Gostaria de saber se depois de obter a string criptografada, se tem como eu obter a string original (através de algum metodo, nao sei) passando alguma chave.
A idéia do MD5 é que você não consiga reverter o processo.
É que ele é uma forma de achar um identificador único para seus dados, não de você criptografar alguma coisa.
Pense bem: se você tem um arquivo de 1MB, mas o MD5 desse arquivo (ou de qualquer outra coisa) tem apenas 16 bytes, como é que você consegue “voltar para trás”? O MD5 deveria ter pelo menos 1MB para poder voltar para trás.
Vou dar outro exemplo.
O MD5 é como se fosse uma “impressão digital de seus dados”.
Se você tiver 2 pessoas (mesmo que sejam gêmeos idênticos) suas impressões digitais serão diferentes; mas a partir de uma impressão digital é impossível dizer todas as características da pessoa (na verdade você só fica sabendo que ela tinha esse determinado dedo da mão quando ela colheu a impressão digital, é claro).
Reverter MD5 é algo computacionalmente inviável, pode-se dizer até que é praticamente impossível para os dias atuais. Algo que piora as coisas é que 2 mensagens podem acabar gerando o mesmo hash MD5. O MD5 mesmo foi propositalmente projetado para não ser revertível. Usam MD5 para “esconder” o conteúdo real das senhas, gravando-se o hash MD5 em algum lugar em vez de guardar a senha numa representação normal. Quando o a senha precisar ser verificada, gera-se MD5 da senha que se quer verificar e compara-se com o hash MD5 da senha gravado em algum lugar.
Você está confundindo criptografia dados com gerar hash dos dados (que é o caso do md5). Não há como reverter hash pois os dados usados nem estão presentes nele.
Atenção: eu normalmente não recomendaria guardar senhas desse jeito. O correto é simplesmente guardar o hash, conforme todo mundo faz, já que você transfere o ônus de saber a senha para o usuário - as senhas na verdade não estão com você; você só sabe uma “impressão digital” dessa senha.
Se você guardar a senha criptografada de modo que você possa recuperá-la, a responsabilidade passa para você, e você pode ter problemas legais mais tarde.
Entendi, o ideal é que somente o usuario saiba sua senha e que ninguem possa descobri-la por outro meio, ou mesmo no proprio servidor.
Eu estou implementando dessa forma.
Eu só tenho essa dúvida, porque estou pesando em outras aplicacoes para isso, nao para dados confidenciais.
Valeu mesmo thingol, era isso que estava procurando…
Na minha aplicação eu uso sha-1 (e vai ficar assim).
Mas achei interessante o seu exemplo usando o base64, ele permite fazer o processo inverso, se eu tiver a chave.