[RESOLVIDO] Setar senha com MD5 no JSF

Oi pessoal,

preciso gravar a senha de uma entidade com criptografia. A função é esta: [code]public class TransformaStringMD5 {

// Função para criar hash da senha informada
public static String md5(String senha) {
	String sen = "";
	MessageDigest md = null;
	try {
		md = MessageDigest.getInstance("MD5");
	} catch (NoSuchAlgorithmException e) {
		e.printStackTrace();
	}
	BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
	sen = hash.toString(16);
	return sen;
}[/code]

O meu MB: [code]public String save(){
Session session = HibernateUtil.currentSession();
Dao dao = new Dao(session, PessoaFisica.class);

	dao.save(this.pessoaFisica);

	this.pessoaFisica = new PessoaFisica(); 
	return "cadastraSucesso";
}[/code]

A visão: <h:outputLabel for="password" value="* Senha " /> <h:inputSecret id="password" validatorMessage="A senha deve ter no mínimo 6 caracteres!" value="#{pessoaFisicaFace.pessoaFisica.userLogin.password}" > <f:validateLength minimum="6"/> </h:inputSecret>

Assim tá gravando do jeito que o usuário digita. Preciso fazer uma chamada parecida com essa: [quote]value="#{TransformaStringMD5.md5(pessoaFisicaFace.pessoaFisica.userLogin.password)}"[/quote]
Sei que não é assim. Como eu faço em JSF?

Obrigada!

Acho que a solução mais simples é você codificar a senha para MD5 antes de persisti-lo, ao invés de direto no inputSecret, na verdade acho que dessa forma que você postou não funcione mesmo. tente dessa forma:

  //algo do tipo
  pessoaFisica.setPassword(TransformaStringMD5.md5(pessoaFisica.getPassword));
  dao.save(pessoaFisica);

tati.mat.moreira,

Voce pode montar a sua aplicação da seguinte forma:

  • no momento de salvar a sua entidade no banco de dados, no seu backing bean realize a encriptação da senha pegando o valor que o usuário digitou na tela;
  • se sua aplicação tiver módulo de edição, nao mostre a senha inteira dentro do campo, mostre alguma máscara ou algo do tipo apenas para nao apresentar o campo vazio, caso o usuário opte por trocar a senha, aí no seu backing bean vc gera a encriptação da nova senha, se ele nao trocar, use a mesma senha que vc tem(vc pode armazená-la num field hidden, por exemplo)…

nao sei c expliquei bem, mas eh isso q te aconselho!

qlq dúvida posta aí que tentamos ajudar! :smiley:

[quote=leonickel]tati.mat.moreira,

Voce pode montar a sua aplicação da seguinte forma:

  • no momento de salvar a sua entidade no banco de dados, no seu backing bean realize a encriptação da senha pegando o valor que o usuário digitou na tela;
  • se sua aplicação tiver módulo de edição, nao mostre a senha inteira dentro do campo, mostre alguma máscara ou algo do tipo apenas para nao apresentar o campo vazio, caso o usuário opte por trocar a senha, aí no seu backing bean vc gera a encriptação da nova senha, se ele nao trocar, use a mesma senha que vc tem(vc pode armazená-la num field hidden, por exemplo)…

nao sei c expliquei bem, mas eh isso q te aconselho!

qlq dúvida posta aí que tentamos ajudar! :smiley: [/quote]

Você diz aqui: [code]public String save(){
Session session = HibernateUtil.currentSession();
Dao dao = new Dao(session, PessoaFisica.class);

	dao.save(this.pessoaFisica);

	this.pessoaFisica = new PessoaFisica(); 
	return "cadastraSucesso";
}[/code] ???

Como eu faço?

Nesse seu trecho de código eu alteraria a sequência das chamadas e adicionaria a chamada para encriptação da senha ficando mais ou menos assim:

public String save(){
		this.pessoaFisica = new PessoaFisica(); 
        this.pessoaFisica.setPassword(TransformaStringMD5.md5(this.password));
        this.pessoaFisica.set.........(outras setagens que vc precise fazer)
		Session session = HibernateUtil.currentSession();
		Dao<PessoaFisica> dao = new Dao<PessoaFisica>(session, PessoaFisica.class); 
		dao.save(this.pessoaFisica);
		return "cadastraSucesso";
	}

Se ainda está com dúvidas, posta aí seu backing bean inteiro que a gente ajuda :smiley:

Aeee… deu certo.

Só alterei meu MB: [code]public String save(){
Session session = HibernateUtil.currentSession();
Dao dao = new Dao(session, PessoaFisica.class);

	UserLogin user = new UserLogin(); 
	
	user.setPassword(TransformaStringMD5.md5(this.pessoaFisica.getUserLogin().getPassword()));
	user.setLoginEmail(this.pessoaFisica.getUserLogin().getLoginEmail());
	
	System.out.println("<<< >>>>> " + this.pessoaFisica.getUserLogin().getPassword());
			
	this.pessoaFisica.setUserLogin(user);
	
	user.setPessoaFisica(pessoaFisica);
			
	dao.save(this.pessoaFisica);

	this.pessoaFisica = new PessoaFisica(); 
	return "cadastraSucesso";
}

[/code]

Agradeço a todos que ajudaram! :wink:

Bjoss…

Pessoal,

Preciso que a senha do sistema seja criptografada, mas estou com a seguinte duvida:

Como eu faço para comparar a senha no momento do login se a mesma está criptografada?
ex: cadastrei usuario com a senha 123, a mesma virou zyx no banco de dados. Quando o usuario faz o login o sistema deve comprar se a senha digitada é igual a que está no banco de dados, mas no banco está diferente, pois foi criptograda.

Utilizo o firebird.

Você irá criptografar a senha no momento do login e então comparar com a do banco pois o algoritmo do MD5 sempre gera a mesma criptografia.

Entendi!

Obrigado silvaesouza!