JSF – Criptografia de senhas com MD5

Neste post irei mostrar um exemplo prático de criptografia MD5 para aplicações JSF.

A API Java implementa dois algoritmos de Message Digest: o MD5 e o SHA-1. O algoritmo MD5 é um algoritmo de hash de 128 bits unidirecional, por isso ele não pode ser transformado na mesma string que foi usada para gerar o código criptografado. Utilizarei a classe java.security.MessageDigest para implementar a aplicação proposta.

Estrutura do projeto

md5_estrutura

Versões utilizadas

  • Eclipse 3.5.0
  • JDK 1.6
  • MyFaces 1.2.5
  • RichFaces 3.3.1

Códigos

TransformaStringMD5.java:

package br.com.serjaum.util;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class TransformaStringMD5 {

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

Pessoa.java:

package br.com.serjaum.entidades;

public class Pessoa {

 private String senha;

 public String getSenha() {
 return senha;
 }

 public void setSenha(String senha) {
 this.senha = senha;
 }

}

PessoaMB.java:

package br.com.serjaum.mb;

import br.com.serjaum.entidades.Pessoa;
import br.com.serjaum.util.TransformaStringMD5;

public class PessoaMB {
 private Pessoa pessoa = new Pessoa();

 private String senhaCriptografada; 

 public String actionCriptografa(){
 this.senhaCriptografada = TransformaStringMD5.md5(this.pessoa.getSenha());

 return "sucesso";
 }

 public Pessoa getPessoa() {
 return pessoa;
 }

 public void setPessoa(Pessoa pessoa) {
 this.pessoa = pessoa;
 }

 public String getSenhaCriptografada() {
 return senhaCriptografada;
 }

 public void setSenhaCriptografada(String senhaCriptografada) {
 this.senhaCriptografada = senhaCriptografada;
 } 

}

pagina.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Página JSF</title>
</head>
<body>
<f:view>
 <h:form>
 <fieldset>
 <legend>Criptografia MD5</legend> 

 <a4j:region id="regiaoAjax">
 <a4j:status id="sts">
 <f:facet name="start">
 <h:graphicImage value="/images/ajax-loader.gif" />
 </f:facet>
 </a4j:status>
 </a4j:region>

 <a4j:outputPanel id="painel" ajaxRendered="true">
 <h:panelGrid columns="2">
 <h:outputLabel for="senha" value="Senha " />
 <h:inputText id="senha" value="#{pessoaMB.pessoa.senha}" size="30">
 <a4j:support event="onblur" action="#{pessoaMB.actionCriptografa}" ajaxSingle="true" status="sts" reRender="senhaCripto"/>
 </h:inputText>

 <h:outputLabel for="senhaCripto" value="Senha Criptografada " />
 <h:inputText id="senhaCripto" value="#{pessoaMB.senhaCriptografada}" size="30" />
 </h:panelGrid>
 </a4j:outputPanel>
 </fieldset>
 </h:form>
</f:view>
</body>
</html>

Importando o projeto

  1. Baixe o projeto atualizado >>aqui<<;
  2. Descompacte o projeto no seu workspace;
  3. No Eclipse vá em: File –> Import –> General – Existing Projects into Workspace –> Next –> Selecione o projeto descompactado no workspace –> Finish.

Executando o projeto

  1. Execute o arquivo pagina.jsp;

Resultado

md5_resultado

Até o próximo post!


7 Comentários on “JSF – Criptografia de senhas com MD5”

  1. Alexandre disse:

    Como faço para descriptografar?
    ex: no login o usuario digita a senha 123456, o sistema precisa comparar com a informação do banco de dados, porém, a mesma esta criptografada.

  2. adenilson disse:

    Ola! gostaria de saber como salvar no banco essa senha criptografada mais no exemplo de hibernate richfaces?vlw otimo exemplo

  3. Rodolfo disse:

    Serjaum, parabéns pelo blog cara! Os posts estão ótimos…
    Vou voltar sempre.
    Abraço.

  4. Luciano de Paula disse:

    muito bom!

  5. Levy disse:

    Você é o cara.


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s