Senha Criptografada no JSP

4 respostas
marcoamv3000

Galera gostaria de saber como eu criptografo em MD5 em uma pagina .jsp. Para que eu possa mandar para o banco de dados.
Caso exista outros modos de criptografia eu aceito como sugestão…

OBS: Preciso criptografar antes de gravar no banco de dados.

4 Respostas

T

MD5 não é um método de criptografia (ou seja, que lhe permita recuperar o dado original dada uma chave).
Ele é um método de "hashing" - é como se fosse um "noves fora" sofisticado.
De qualquer maneira, ele pode ser usado com senhas, como você mencionou.

Você pode fazer isso de duas maneiras diferentes:

  • Diretamente em Javascript - nesse caso é o browser que calcula o MD5, não o servidor (que hospeda as páginas JSP).
    Isso é feito, por exemplo, pelo web mail do Yahoo.
  • Ou no JSP mesmo - isso requer https no site, para que seja um pouco mais seguro.

Se for fazer em Java, veja o que você pode aproveitar do código abaixo.

import java.security.*;

public class PasswordMD5 {
	public static void main(String[] args) {
		try {
		    String password = PasswordMD5.toPassword ("NicoleKidman"); // a senha cadastrada
		    System.out.println ("password = " + password);
		    String password2 = PasswordMD5.toPassword ("NicoleKIdman"); // usuário digitou errado
		    System.out.println ("password2 = " + password2);
		    String password3 = PasswordMD5.toPassword ("NicoleKidman"); // usuário digitou certo
		    System.out.println ("password3 = " + password3); 
		    if (!password.equals(password2)) {
		        // como a senha não bate...
		        System.out.println ("password2 eh uma senha incorreta"); 
                    }
		    if (password.equals(password3)) {
		        // como a senha bate...
		        System.out.println ("password3 eh uma senha correta"); 
                    }
		} catch (Exception ex) {
		    ex.printStackTrace();
		}
        }
	private static String bytesToHex (byte[] b) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < b.length; ++i) {
			sb.append ((Integer.toHexString((b[i] & 0xFF) | 0x100)).substring(1,3));
		}
		return sb.toString();
	}
	public static String toPassword (String data) throws NoSuchAlgorithmException {
		byte[] mybytes = data.getBytes();
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		byte[] md5digest = md5.digest (mybytes);
		return bytesToHex (md5digest);
	}
}
T

Quando você for definir o campo “senha” no seu banco de dados, reserve exatamente 32 caracteres, se for usar o MD5 codificado em hexadecimal, conforme eu mostrei no exemplo acima.

marcoamv3000

Existe outro método além do MD5 para se fazer em JSP sem ter que usar https…
o javascript existe alguma função que calcula o MD5 ou tenho que fazer a função…

T

Não é que o MD5 “requeira” https. É que quando você tem uma tela de login clássica, sem https, o POST trafega a senha “em claro” pela Internet; se você fizer isso em Javascript, em vez de Java, a página faz um “post” do MD5 em vez da senha “em claro”. Mas isso também não é totalmente seguro, tanto é que o Yahoo e o GMail, que usam esquemas semelhantes de MD5, chaveiam para um site seguro só para fazer o login, e depois voltam para um site “aberto”.
Para o cálculo do MD5 em Javascript, você pode tentar decifrar a página Javascript do Yahoo Mail, mas aviso que é um bocadinho complicada (tanto para economizar espaço, quanto para otimizar velocidade de execução).

Criado 6 de fevereiro de 2008
Ultima resposta 6 de fev. de 2008
Respostas 4
Participantes 2