Criptografia de Senhas em java

Criptografia Java

Guardar senhas em texto puro

não deve ser uma prática seguida

Como todo mundo sabe, anotar senhas não é uma pratica recomendada por nenhum gerente de redes que se preze. Sendo assim, guardar senhas em texto puro não deve ser uma prática seguida por nenhum programador ou analista de respeito.

Partindo desse principio, quero mostrar nesse tutorial, como fazer um digest em uma senha antes de armazená-la em um repositório qualquer.

Conceitos

Java suporta criptografia com e sem chaves. Basicamente, a diferença é que, quando não usamos chaves para encriptar uma mensagem, não podemos decriptá-la depois. Esse último método, na verdade, é criptografia, isso é o que chamamos de assinatura da mensagem ou hash, mas é o mais utilizado para armazenar senhas? depois de criptografada, você não deve precisar mais dela em texto puro? e por isso é o que utilizaremos nesse tutorial. A ideia é que a senha fornecida pelo usuário, na hora do logon, seja criptografada usando o mesmo
algoritmo utilizado para gravar a senha no banco e aí a comparação é feita com as duas senhas encriptadas, ou, melhor dizendo, entre suas assinaturas.
Prática
Partindo pra prática, o negócio é bastante simples.

O que você precisa fazer é só criar um digester com um algoritmo

de criptografia específico e, em seguida, fazer o digest da senha.
____________________________________________________

01 import java.security.MessageDigest;
02 import java.security.NoSuchAlgorithmException;
03
04 import sun.misc.BASE64Encoder;
05
06 /**
07 * @author
08 */
09 public class EncriptaSenha {
10
11 public static String encripta (String senha) {
12 try {
13 MessageDigest digest = MessageDigest.getInstance(“MD5”);
14 digest.update(senha.getBytes());
15 BASE64Encoder encoder = new BASE64Encoder ();
16 return encoder.encode (digest.digest ());
17 } catch (NoSuchAlgorithmException ns) {
18 ns.printStackTrace ();
19 return senha;
20 }
21 }
22 }

_______________________________________________

Aí está o nosso encriptador. Agora vamos explicar o método.

Na linha 13, nós criamos o digester com o algoritmo MD5. Além desse, Java suporta ainda MD2, SHA, SHA-1, SHA-256, SHA-384 e SHA-512. Fique a vontade para experimentá-los.
Na linha seguinte, o método update adiciona bytes a mensagem a ser criptografada. Em seguida, criamos um encoder para impedir que a senha encriptada apareça com caracteres que costumam causar problemas em xml e alguns bancos de dados.
Por último, o método digest.digest () retorna a mensagem encriptada e o método encoder.encode () substitui os caracteres problemáticos.

Pronto, agora você já deve saber como guardar uma senha de uma forma mais segura, como ensinam os nossos professores.

Para saber mais sobre criptografia em Java, você pode dar uma olhada na documentação oficial da SUN em http://java.sun.com/j2se/1.5.0/docs/guide/security/CryptoSpec.html.

Autor : Jarbas Jocênio F. de Lima