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?
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);
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!
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! [/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] ???
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.