É o tipo de código que em algum momento iremos precisar.
Gostaria apenas de fazer algumas considerações:
O uso da classe BASE64Encoder não é recomendado por ser do pacote sun, que pode mudar de uma versão para outra. (Imagino que seja a classe sun.misc.BASE64Encoder)
Para realizar este passo é melhor utilizar uma lib de terceiros ou desenvolver uma própria.
É recomendado utilizar a versão do getBytes() que recebe um Charset como parâmetro.
Por último, é recomendado adicionar um salt (um prefixo, numa tradução livre) na hora de gerar o hash da senha.
Esse salt impede que senhas iguais gerem o mesmo hash, tornando muito mais dificil um ataque de força bruta.
Esse salt é um valor qualquer que varia por login (pode ser até o próprio login).
Mesmo que dois usuários escolham a mesma senha, concatenando esse salt, os dois hashs gerados serão completamente diferentes.
Sei que isso vai de programador para programador e tudo mais… Caso for utilizar JDBC no projeto, seria mais simples utilizar o MD5 ao inserir dados no banco, não acha ?
Mas a ideia do amigo do post é bem interessante e funcional. Usando algum banco de dados que não tenha esta função… Seria ótimo utilizar sim o que o amigo do post disse… só dei mais uma opção… caso o BD tenha esta função.
[quote]É possivel implementar esse código em um Filtro para Servlet? você tem algum modelo desse código implementado em um filtro? eu estou aprendendo a usar Filtro e session e seria legal criptografar a senha.
[quote=rsmoraes]Sei que isso vai de programador para programador e tudo mais… Caso for utilizar JDBC no projeto, seria mais simples utilizar o MD5 ao inserir dados no banco, não acha ?
Concordo que esta ideia é a mais Pratica , aqui esta em cima é muito dependente da linguagem Java em Sim, imaginem-se se for um Banco que também precisa ser acessado via Web ou outra linguagem ? Ja não se poderia Fazer Autenticações e cadastros!
Acho que é mais practico fazer criptografias ao nivel de Banco de Dados , é so investigar um pouco mais o seu SGBD
Na verdade, esse código acima não depende em nada do Java. O MD5 é um algoritmo que pode ser implementado em virtualmente qualquer linguagem.
O resultado da função mysql não será diferente da função no java, exceto talvez pelo formato base64 (não sei como o mysql retorna a função md5 dele).
É realmente mas simples, mas tem algumas limitações.
Toda vez, por exemplo, que tentar validar a senha terá que ir ao banco de dados chamar a função do mysql.
Se quisesse pedir para o usuário digitar novamente a senha para uma operação sensível, poderia ter o hash armazenado na própria sessão do usuário.
Com essa abordagem, teria que sempre acessar o bd.
Você acaba dando a responsabilidade de validar senha para o bd e não para aplicação.