Comparar senha criptografada

2 respostas
Chuvinha

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

/**
	 * 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;
	}

Agora estou fazendo a parte de autenticação.

public String execute(){
		if(this.usuarioDAO.cadastrado(this.usuario)){
			ActionContext.getContext().getSession().put("usuarioLogado", usuario);
			return SUCCESS;
		}
		
		
		return "input";
	}

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

2 Respostas

B

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.

orogerio

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

Criado 27 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 2
Participantes 3