Criptografia com Java e PostgreSQL

2 respostas
R

Olá Pessoal. Estou querendo recuperar a senha salva no banco de dados (String) e comparar com a senha digitada pelo usuário para validá-lo no sistema. Para salvar a senha no banco utilizo a seguinte linha:

String gravaRegistro = "insert into usuarios values(?, md5(?))";

Porém, para comparar a String salva no banco com a String digitada pelo usuário utilizando o código abaixo, a String gerada é totalmente diferente da que está salva no banco (porém a senha digitada é a mesma).

String senha = JOptionPane.showInputDialog("Digite sua Senha:");
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hashSenha = md.digest(senha);
JOptionPane.showMessageDialog(null, hashSenha); // Utilizei esse recurso  pra conferir se as senhas eram idênticas
md.reset();
catch (Exception e){
// Tratamento da Exception
}
...
if(hashSenha.equals(con.rs.getString("senha"))
JOptionPane.showMessageDialog(null, "Bem Vindo");
else
JOptionPane.showMessageDialog(null, "Senha Inválida");

O MD5 Gerado pelo PostgreSQL é Diferente do MD5 gerado pelo Java???

2 Respostas

V

colega, a funçao pra gerar MD5 é sempre o mesmo, nao tem como o banco gerar um hash pra uma senha e o java gerar um hash diferente da mesma senha com ambos utilizando o MD5… voce ja pediu para a sua IDE mostrar ambos os hahes? tanto do gerado pelo banco quanto do gerado pelo java? é o mesmo? se nao é o mesmo, entao voce pode estar errando em algum passo

M

rolipam,

Você precisa realizar alguns passos extras, segue código que vai retornar o mesmo valor do postgres:

public static String md5(String valor){
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			digest.update(valor.getBytes());
			return new BigInteger(1, digest.digest()).toString(16).trim();
		}catch(Exception e) {
			throw new RuntimeException("Erro ao calcular MD5 de " + valor,e);
		}	
	}

Testa aí e fala se deu certo.

Criado 25 de março de 2012
Ultima resposta 25 de mar. de 2012
Respostas 2
Participantes 3