Comparar senha criptografada

Galera, estou usando este metódo para criptografar a senha antes de salvar no banco.

[code]
/**
* Criptografa a senha do usuario para salvar no banco de dados
* @return senha criptografada
*/
private String criptografaSenha(String senha){
try {
MessageDigest algorithm = MessageDigest.getInstance(“SHA-256”);
byte messageDigest[] = algorithm.digest(senha.getBytes(“UTF-8”));

		StringBuilder hexString = new StringBuilder();
		for (byte b : messageDigest) {
		  hexString.append(String.format("%02X", 0xFF & b));
		}
		senha = hexString.toString();
	} catch (Exception e) {
		return null;
	}
	
	return senha;
}[/code]

Agora estou fazendo a parte de autenticação.

[code]
public String execute(){
if(this.usuarioDAO.cadastrado(this.usuario)){
ActionContext.getContext().getSession().put(“usuarioLogado”, usuario);
return SUCCESS;
}

	return "input";
}[/code]

Como faço pra saber se as senhas são iguais?

Vou explicar como é que funciona essa história com senhas.

Digamos que em vez de senhas tivéssemos números, e em vez de você guardar o número na base, só guardasse o resto da divisão por 137. Note que a senha, em si, não é guardada, só o resultado desse cálculo.

Por exemplo, a senha (número) fornecido seria 12345678, cujo resto da divisão por 137 é 60. Quando a aplicação for guardar a “senha”, vai guardar é esse cálculo, que é o número 60.

Note também que é impossível você voltar ao número original (porque poderia, por exemplo, ser o número 1691325, por exemplo, cujo resto também é 60).

Se a pessoa fornecer um número como 12345678, então o resto vai ser 60 e então ele pode entrar no sistema porque a “senha bate”.

Entretanto, se ele entrar com o número 6209037, por exemplo, vai dar também resto 60 e ele vai poder entrar.

Aí você vai falar “mas que m____, então você pode entrar mesmo sem saber a senha correta?”

No caso do algoritmo que você usou (que é o SHA-256), é muito, muito difícil achar um valor que bata igual ao caso que lhe mostrei. Por isso, embora ele seja funcionalmente equivalente ao caso de eu achar o resto (que é uma coisa boboca), já que você só consegue bater o resultado da operação, não o valor original da senha, na prática é muito, muito mais seguro que guardar a senha criptografada.

Olá

1º - Recupere a senha criptografada do usário informado no banco de dados;
2º - Chame sua função criptografaSenha com a senha que o usuário informou no campo;
3º - Compare as duas senha criptografadas. Com equals mesmo.

Só isso. :smiley:
até mais