Criptografar senha no banco de dados MYSQl

Olá tenho essa Classe Chamada [color=red]ClassLogin[/color] ela esta ligada ao banco de dados MYSQL queria[color=green] criptografar a senha[/color] mas não sei como fazer ja que sou iniciante no assunto peço a ajuda de vcs muito Obrigado desde já.


 import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class ClassLogin {
    
    //========================================================
    //    Conexao com o Banco
    //========================================================
    
    ClassConecta conexao = new ClassConecta();
    
    public void logar (JFrame frame ,String login, String senha, String nivel) throws SQLException {  
          
      String sql = "select login, senha, nivel from flogon where login = ? and senha = ?  and nivel = ?";  
      PreparedStatement stmt = (PreparedStatement) this.conexao.conecta().prepareStatement(sql);  
  
         stmt.setString(1, login); 
         stmt.setString(2, senha);  
         stmt.setString(3, nivel);  
     
         ResultSet rs = stmt.executeQuery();  
  
         if (rs.next()){  
  
      
    //========================================================
    // Abre a tela do administrador 
    //========================================================
             
             
             if(nivel.equals("ADMINISTRADOR"))  
              {   System.out.println("Bem-vindo administrador");
              
                   frame.setVisible(false);
                  new FCadUser().setVisible(true);  
  
  
              } 
    //========================================================
    //Senão abre a tela de usuário
    //========================================================
             
          
              else if (nivel.equals("FUNCIONARIO")){  
                  System.out.println("Bem-vindo funcionario");  
                  new FPrincipal().setVisible(true); }  
             
               
                         }  
             
  //========================================================
  // Caso login esteja incorreto, mostra essa frase 
  //========================================================
         
         else{  
             JOptionPane.showMessageDialog(null, "Login Incorreto.\n" +  
                     "Tente novamente.\n","ALERTA", JOptionPane.ERROR_MESSAGE);}  
  
  
  
      rs.close();  
      stmt.close();  
  
  }  

    
  
      
 }   
    
    //========================================================
    //Fim da Classe 
    //========================================================

E esse aqui é o código do[color=red] botão do JFrame[/color]

[code]

private void BotaoEntrarActionPerformed(java.awt.event.ActionEvent evt) {

      String senha = jPFsenha.getText();  
      String log = jTF_usuario.getText();  
      String nivel = jCB_nivel.getSelectedItem().toString();
      
    try {  

        ClassLogin login = new ClassLogin();
        login.logar(this,log, senha , nivel);

    } catch (SQLException ex) {  
        Logger.getLogger(FLogon.class.getName()).log(Level.SEVERE, null, ex); 
            
    }

} [/code]

No aguardo !

import java.security.*;

..

byte[] bytesDaSenha = senha.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(bytesDaSenha);

Isso resulta num código MD5 vc joga ele n banco, e sempre quando for comparar vc compara os md5 e não as strings

tem mais sobre o MessageDigest aqui http://docs.oracle.com/javase/6/docs/api/java/security/MessageDigest.html

Alguém poderia me dar um exemplo de como ficaria nesse meu código por favor ???

Muito Obrigado !
No Aguardo!

public static String criptografia(String original) { String senha = null; MessageDigest algoritmo; byte messageDigest[]; StringBuilder hexString; try { //algoritmo =MessageDigest.getInstance("SHA-256");// 64 letras algoritmo = MessageDigest.getInstance("MD5"); // 32 letras messageDigest = algoritmo.digest(original.getBytes("UTF-8")); hexString = new StringBuilder(); for (byte b : messageDigest) { hexString.append(String.format("%02X", 0xFF & b)); } senha = hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println("Senha normal: "+original+" - Senha criptografada: "+senha); return senha; }

luxu, Beleza esse código que vc me passou ta legal mostra a senha norma e criptografada na aplicação desktop, mas o que eu realmente quero é salvar essa senha criptografada dentro do banco de dados MYSQl a senha esta sendo salva na coluna na tabela , mas eu quero salva-la criptografada e fazer a autenticação com ela criptografada mesmo, Me ajude por favor. Grato !

@Column(name = "usu_senha") private String senha;
ela retorna uma string daí só pegar ela e jogar no banco criptografada…

public String salvar() {
		if (confirmarSenha.equals(usuario.getSenha())) {
			MessageDigest algoritmo;
			byte messageDigest[];
			StringBuilder hexString;
			InterfaceDAO<Usuario> usuarioDAO = new HibernateDAO<Usuario>(Usuario.class, FacesContextUtil.getRequestSession());
			Funcionario funcionario = new Funcionario();
			funcionario.setCodigo(codigoFuncionario);
			usuario.setFuncionario(funcionario);
			try {
				algoritmo = MessageDigest.getInstance("MD5");  // 32 letras
				messageDigest = algoritmo.digest(usuario.getSenha().getBytes("UTF-8"));
				hexString = new StringBuilder();
				for (byte b : messageDigest) {
					hexString.append(String.format("%02X", 0xFF & b));
				}
				usuario.setSenha(hexString.toString());
			} catch (NoSuchAlgorithmException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			try {
				usuarioDAO.salvar(usuario);
				model = null;
				FacesContextUtil.setMensagemSucesso("Registro CADASTRADO com sucesso!");
			} finally {
				usuario = new Usuario();
				codigoFuncionario = null;
			}
		} else {
		    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro", "Senha e Contra Senha não conferem!!"));
		    usuario.setSenha(null);
		}
		confirmarSenha = null;
		return null;
	}

Não consegui adequar esse código ao meu projeto vc pode me dar só mais uma forcinha??? Obrigado e desculpe minha ignorância

Eu axo também que falta algo aqui, podem me tirar essa dúvida

String sql = "select login, senha, nivel from flogon where login = ? and senha = ?  and nivel = ?";

[quote=Oziel Morais]Eu axo também que falta algo aqui, podem me tirar essa dúvida

String sql = "select login, senha, nivel from flogon where login = ? and senha = ? and nivel = ?"; [/quote]

Para o método “logar”, você passará a senha já criptografada em MD5 (como os colegas explicaram acima), que é o formato (HASH) que está salvo no banco.
Ou seja, para esse método não passa nada.

Basicamente é assim: você não salvará a senha diretamente no banco, você colocará ela em um hash, neste caso, o MD5.

Ele é um algoritmo unidirecional, ou seja, não é possível desencriptar.
Desse modo, é feito assim: sua aplicação encriptará a senha digitada, e liberará o login se o MD5 da senha digitada bater com o MD5 que foi salvo no banco.