Por que não é possível descriptografar a senha?

22 respostas
Thallysson

Olá, faz algum tempo que eu estou fazendo um programa para gerenciar contas no num banco de dados mysql que eu tenho aqui, já testei, tudo funciona corretamente, é possível fazer cadastro e login sem problemas, porém eu decidi criptografar a senha agora no banco de dados, a dias eu estou estudando todas as maneiras de fazer isso em java, não consegui de maneira alguma, então eu descobri as funções de aes_encrypt e aes_decrypt do mysql, na linha de comando eu consegui criptografar e descriptografar tranquilamente, porém eu não estou conseguindo fazer isso no java de maneira alguma, o campo senha que estou utilizando, é um varbinary, quando eu registro e dou um select, é retornado blob, e se eu dou um select descriptografando é retornado um campo vazio, aqui está a classe que eu uso para fazer todo o registro e comunicação com o banco:
`

package mysql;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import LookAndFeel.TKFLookAndFeel;
import ftp.FTP;
import objetos.Funcionario;
import objetos.UsuarioFisico;
import objetos.UsuarioJuridico;

public class ComunicacaoBanco implements ActionListener {
	private final String url = "jdbc:mysql://localhost/tkf";
	public static Connection conexao = null;
	static JDialog registrando = new JDialog();
	private TKFLookAndFeel look = new TKFLookAndFeel();
	static JDialog registrou = new JDialog();
	boolean bexecutar = true;
	boolean erro2 = true;
	JDialog erro = new JDialog();
	JButton terminar = new JButton("Ok, entendi");
	JButton ok = new JButton("OK");
	public static JProgressBar progressBar = new JProgressBar();

	public ComunicacaoBanco() {
		try {
			conexao = DriverManager.getConnection(url, "root", "thallysson");
			System.out.println("Conectou");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void Registrar(UsuarioFisico usuario) {
		String sql = "INSERT INTO contasfisicas VALUES(default,?,?,?,?,AES_ENCRYPT(?,?),?,?,?,?,?,?,?,?,?,?,?);";
		PreparedStatement executar = null;
		try {
			executar = conexao.prepareStatement(sql);
			
			if (usuario.getNomeDeUsuario() != null) {
				executar.setString(1, usuario.getNomeDeUsuario());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome de usuario nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getNome() != null) {
				executar.setString(2, usuario.getNome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getSobrenome() != null) {
				executar.setString(3, usuario.getSobrenome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o sobrenome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getEmail() != null) {
				executar.setString(4, usuario.getEmail());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o email nao pode seu nulo");
				bexecutar = false;
			}
			
			if (usuario.getSenha() != null) {
				executar.setString(5, usuario.getSenha());
				executar.setBytes(6, new String("key").getBytes());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a senha nao pode seu nula");
				bexecutar = false;
			}
			if (usuario.getNasc() != null) {
				executar.setDate(7, new java.sql.Date(usuario.getNasc().getTime()));
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a data de nascimento nao pode seu nula");
				bexecutar = false;
			}
			executar.setString(8, usuario.getTelefone());
			if (usuario.getSexo()) {
				executar.setString(9, "M");
			} else {
				executar.setString(9, "F");
			}
			if (usuario.getNacionalidade() != null) {
				executar.setString(10, usuario.getNacionalidade());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a nacionalidade nao pode seu nula");
				bexecutar = false;
			}
			if (usuario.getCep() != 0) {
				executar.setInt(11, usuario.getCep());
			} else {
				executar.setString(11, null);
			}
			if (usuario.getCpf() != 0) {
				executar.setInt(12, usuario.getCpf());
			} else {
				executar.setString(12, null);
			}
			if (usuario.getSobre() != null && usuario.getSobre() != "") {
				executar.setString(13, usuario.getSobre());
			} else {
				executar.setString(13, null);
			}
			try {
				if (usuario.getFoto().toString() != null) {
					JDialog processoenviar = new JDialog();
					String nomecompleto = usuario.getFoto().getName();
					String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."), nomecompleto.length());
					FTP upload = new FTP();
					if (bexecutar) {
						new Thread(new Runnable() {
							public void run() {
								processoenviar.setLayout(new BorderLayout());
								processoenviar.setUndecorated(true);
								processoenviar.setModal(true);
								JLabel ti = new JLabel("Enviando sua imagem:");
								JPanel contentpanelz = new JPanel(new BorderLayout());
								contentpanelz.add(ti, BorderLayout.NORTH);
								progressBar.setPreferredSize(new Dimension(0, 30));
								progressBar.setMinimum(0);
								progressBar.setValue(0);
								progressBar.setStringPainted(true);
								contentpanelz.add(progressBar, BorderLayout.CENTER);
								processoenviar.setContentPane(contentpanelz);
								look.formatar(processoenviar, null);
								processoenviar.setLocationRelativeTo(null);
								processoenviar.setVisible(true);
							}
						}).start();
						upload.upload("localhost", "/TKF/Physical-Accounts/" + usuario.getNomeDeUsuario(),
								usuario.getFoto().toString(), "eu", "thallysson", usuario.getNomeDeUsuario());
					}
					String caminhoImagem = "/TKF/Physical-Accounts/" + usuario.getNomeDeUsuario() + "/perfil"
							+ extensao;
					executar.setString(14, caminhoImagem);
					processoenviar.dispose();
				}
			} catch (NullPointerException erro) {
				executar.setString(14, null);
				System.out.println("nullpointerexception");
			}
			executar.setDate(15, new java.sql.Date(new Date().getTime()));
			executar.setString(16, usuario.getCodigo());
			executar.setString(17, usuario.getPergunta());
			if (bexecutar) {
				new Thread(new Runnable() {
					public void run() {
						JPanel content = new JPanel(new BorderLayout());
						registrando.setUndecorated(true);
						JLabel label = new JLabel("Registrando seus dados...");
						content.add(label, BorderLayout.CENTER);
						content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
						registrando.setContentPane(content);
						look.formatar(registrando, null);
						registrando.setLocationRelativeTo(null);
						registrando.setVisible(true);
					}
				}).start();
				try {
					executar.executeUpdate();
				} catch (Exception erro) {
					erro.printStackTrace();
					erro2 = false;
					registrando.dispose();
				}
			} else {
				erro2 = false;
			}

			executar.close();
			if (erro2) {
				ok.addActionListener(this);
				registrou.setModal(true);
				JPanel content = new JPanel(new BorderLayout());
				JPanel content2 = new JPanel(new FlowLayout());
				registrou.setUndecorated(true);
				JLabel label2 = new JLabel("Seus dados foram registrados com exito!");
				content.add(label2, BorderLayout.CENTER);
				content2.add(ok);
				content.add(content2, BorderLayout.SOUTH);
				content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
				registrou.setContentPane(content);
				look.formatar(registrou, null);
				registrou.setLocationRelativeTo(null);
				registrou.setVisible(true);
			} else {
				JLabel rotulo = new JLabel(
						"<html><center>Ocorreu um erro desconhecido ao registrar seus dados,<br/>Tente novamente</center><html>");
				terminar.addActionListener(this);
				JPanel pterminar = new JPanel(new FlowLayout());
				erro.setLayout(new BorderLayout());
				erro.add(rotulo, BorderLayout.CENTER);
				pterminar.add(terminar);
				erro.add(pterminar, BorderLayout.SOUTH);
				look.formatar(erro, null);
				erro.setLocationRelativeTo(null);
				erro.setVisible(true);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void Registrar(UsuarioJuridico usuario, ArrayList<Funcionario> funcionarios) {
		String sql = "INSERT INTO contasjuridicas VALUES(default,?,?,AES_ENCRYPT(?,contasjuridicas.nomedaempresa),?,?,?,?,?,?,?,?,?);";
		PreparedStatement executar = null;
		try {
			executar = conexao.prepareStatement(sql);
			if (usuario.getNomeResp() != null) {
				executar.setString(1, usuario.getNomeResp());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nomeresp nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getNome() != null) {
				executar.setString(2, usuario.getNome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getSenha() != null) {
				executar.setString(3, usuario.getSenha());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a senha nao pode seu nula");
				bexecutar = false;
			}
			executar.setString(4, usuario.getNacionalidade());
			if (usuario.getCnpj() != 0) {
				executar.setInt(5, usuario.getCnpj());
			} else {
				executar.setString(5, null);
			}
			if (usuario.getDescricao() != null) {
				executar.setString(6, usuario.getDescricao());
			}
			try {
				if (usuario.getLogo() != null) {
					JDialog processoenviar = new JDialog();
					String nomecompleto = usuario.getLogo().getName();
					String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."), nomecompleto.length());
					FTP upload = new FTP();
					if (bexecutar) {
						new Thread(new Runnable() {
							public void run() {
								processoenviar.setLayout(new BorderLayout());
								processoenviar.setUndecorated(true);
								processoenviar.setModal(true);
								JLabel ti = new JLabel("Enviando sua imagem:");
								JPanel contentpanelz = new JPanel(new BorderLayout());
								contentpanelz.add(ti, BorderLayout.NORTH);
								progressBar.setPreferredSize(new Dimension(0, 30));
								progressBar.setMinimum(0);
								progressBar.setValue(0);
								progressBar.setStringPainted(true);
								contentpanelz.add(progressBar, BorderLayout.CENTER);
								processoenviar.setContentPane(contentpanelz);
								look.formatar(processoenviar, null);
								processoenviar.setLocationRelativeTo(null);
								processoenviar.setVisible(true);
							}
						}).start();
						upload.upload("localhost", "/TKF/Legal-Accounts/" + usuario.getNome(),
								usuario.getLogo().toString(), "eu", "thallysson", usuario.getNome());
					}
					String caminhoImagem = "/TKF/Legal-Accounts/" + usuario.getNome() + "/perfil" + extensao;
					executar.setString(7, caminhoImagem);
					processoenviar.dispose();
				} else {
					executar.setString(7, null);
				}
			} catch (NullPointerException erro) {
				erro.printStackTrace();
				System.out.println("Ocorreu u null pointer exception");
			}

			if (usuario.getEmail() != null) {
				executar.setString(8, usuario.getEmail());
			} else {
				executar.close();
				System.out.println("A operacao falhou porque o email nao pode ser nulo");
				bexecutar = false;
			}
			executar.setString(9, usuario.getTelefone());
			executar.setDate(10, new java.sql.Date(new Date().getTime()));
			if (usuario.getCodigo() != null) {
				executar.setString(11, usuario.getCodigo());
			} else {
				executar.setString(11, null);
			}
			if (usuario.getPergunta() != null) {
				executar.setString(12, usuario.getPergunta());
			} else {
				executar.setString(12, null);
			}
			if (bexecutar) {
				new Thread(new Runnable() {
					public void run() {
						JPanel content = new JPanel(new BorderLayout());
						registrando.setUndecorated(true);
						JLabel label = new JLabel("Registrando seus dados...");
						content.add(label, BorderLayout.CENTER);
						content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
						registrando.setContentPane(content);
						look.formatar(registrando, null);
						registrando.setLocationRelativeTo(null);
						registrando.setVisible(true);
					}
				}).start();
				try {
					executar.executeUpdate();
				} catch (Exception erro) {
					erro.printStackTrace();
					erro2 = false;
					registrando.dispose();
				}
			} else {
				erro2 = false;
			}

			executar.close();
			if (erro2) {
				ok.addActionListener(this);
				registrou.setModal(true);
				JPanel content = new JPanel(new BorderLayout());
				JPanel content2 = new JPanel(new FlowLayout());
				registrou.setUndecorated(true);
				JLabel label2 = new JLabel("Seus dados foram registrados com exito!");
				content.add(label2, BorderLayout.CENTER);
				content2.add(ok);
				content.add(content2, BorderLayout.SOUTH);
				content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
				registrou.setContentPane(content);
				look.formatar(registrou, null);
				registrou.setLocationRelativeTo(null);
				registrou.setVisible(true);
			} else {
				JLabel rotulo = new JLabel(
						"<html><center>Ocorreu um erro desconhecido ao registrar seus dados,<br/>Tente novamente</center><html>");
				terminar.addActionListener(this);
				JPanel pterminar = new JPanel(new FlowLayout());
				erro.setLayout(new BorderLayout());
				erro.add(rotulo, BorderLayout.CENTER);
				pterminar.add(terminar);
				erro.add(pterminar, BorderLayout.SOUTH);
				look.formatar(erro, null);
				erro.setLocationRelativeTo(null);
				erro.setVisible(true);
			}
			if (funcionarios != null) {
				String sql2 = "SELECT LAST_INSERT_ID() INTO @id;";
				PreparedStatement smt = conexao.prepareStatement(sql2);
				ResultSet rs = smt.executeQuery();
				if (rs.next()) {
					int idempresa = rs.getInt(1);
					System.out.println("id = " + idempresa);
					for (Funcionario funcionario : funcionarios) {
						if (funcionario.getNome() != null && funcionario.getSenha() != null) {
							String sql3 = "INSERT INTO funcionarios VALUES(default,@id,?,AES_ENCRYPT(?,funcionarios.nome),?,?,?,?,?)";
							PreparedStatement inserirfunc = conexao.prepareStatement(sql3);
							String nome = funcionario.getNome();
							nome = nome.substring(0, 1).toUpperCase().concat(nome.substring(1));
							inserirfunc.setString(1, nome);
							inserirfunc.setString(2, funcionario.getSenha());
							SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
							java.util.Date dataUtil = null;
							try {
								dataUtil = df.parse(funcionario.getNasc());
							} catch (ParseException e) {
								e.printStackTrace();
							}
							inserirfunc.setDate(3, new java.sql.Date(dataUtil.getTime()));
							if (funcionario.getSexo() == "Masculino") {
								inserirfunc.setString(4, "M");
							} else if (funcionario.getSexo() == "Feminino") {
								inserirfunc.setString(4, "F");
							}
							inserirfunc.setString(5, funcionario.getNacionalidade());
							try {
								if (funcionario.getCpf().contains("0") || funcionario.getCpf().contains("1")
										|| funcionario.getCpf().contains("2") || funcionario.getCpf().contains("3")
										|| funcionario.getCpf().contains("4") || funcionario.getCpf().contains("5")
										|| funcionario.getCpf().contains("6") || funcionario.getCpf().contains("7")
										|| funcionario.getCpf().contains("8") || funcionario.getCpf().contains("9")) {

									String cpf = funcionario.getCpf();
									cpf = cpf.replace(".", "");
									cpf = cpf.replace("-", "");
									inserirfunc.setInt(6, Integer.parseInt(cpf));
								} else {
									inserirfunc.setString(6, null);
								}
							} catch (NullPointerException erro) {
								inserirfunc.setString(6, null);
							}
							if (funcionario.getImagem() != null) {
								JDialog processoenviar = new JDialog();
								String nomecompleto = funcionario.getImagem().getName();
								String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."),
										nomecompleto.length());
								FTP upload = new FTP();
								if (bexecutar) {
									new Thread(new Runnable() {
										public void run() {
											processoenviar.setLayout(new BorderLayout());
											processoenviar.setUndecorated(true);
											processoenviar.setModal(true);
											JLabel ti = new JLabel("Enviando sua imagem:");
											JPanel contentpanelz = new JPanel(new BorderLayout());
											contentpanelz.add(ti, BorderLayout.NORTH);
											progressBar.setPreferredSize(new Dimension(0, 30));
											progressBar.setMinimum(0);
											progressBar.setValue(0);
											progressBar.setStringPainted(true);
											contentpanelz.add(progressBar, BorderLayout.CENTER);
											processoenviar.setContentPane(contentpanelz);
											look.formatar(processoenviar, null);
											processoenviar.setLocationRelativeTo(null);
											processoenviar.setVisible(true);
										}
									}).start();
									upload.upload("localhost",
											"/TKF/Legal-Accounts/" + usuario.getNome() + "/Workers/"
													+ funcionario.getNome(),
											funcionario.getImagem().toString(), "eu", "thallysson", usuario.getNome());
								}
								String caminhoImagem = "/TKF/Legal-Accounts/" + usuario.getNome() + "/Workers/"
										+ funcionario.getNome() + "/perfil" + extensao;
								inserirfunc.setString(7, caminhoImagem);
								processoenviar.dispose();
							} else {
								inserirfunc.setString(7, null);
							}
							if (bexecutar) {
								inserirfunc.executeUpdate();
							}
						}
					}
				}
			}
		} catch (SQLException erro) {
			erro.printStackTrace();
		}
	}

	public boolean verificaRegistroFisico(String valor) {
		JDialog verificando = new JDialog();
		verificando.setUndecorated(true);
		JPanel content = new JPanel(new BorderLayout());
		content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
		JLabel mensagen = new JLabel("Verificando Registro");
		content.add(mensagen, BorderLayout.CENTER);
		verificando.setContentPane(content);
		look.formatar(verificando, null);
		verificando.setLocationRelativeTo(null);
		verificando.setVisible(true);
		String sql = "select * from contasfisicas where nomedeusuario = '" + valor + "';";
		PreparedStatement stm = null;
		boolean retorno = false;
		try {
			stm = conexao.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultado = null;
		try {
			resultado = stm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (resultado.next()) {
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		verificando.dispose();
		return retorno;
	}

	public void actionPerformed(ActionEvent evento) {
		if (evento.getSource() == terminar) {
			erro.dispose();
		}
		if (evento.getSource() == ok) {
			registrou.dispose();
			registrando.dispose();
		}
	}

	public boolean verificaRegistroJuridico(String valor) {
		JDialog verificando = new JDialog();
		verificando.setUndecorated(true);
		JPanel content = new JPanel(new BorderLayout());
		content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
		JLabel mensagen = new JLabel("Verificando Registro");
		content.add(mensagen, BorderLayout.CENTER);
		verificando.setContentPane(content);
		look.formatar(verificando, null);
		verificando.setLocationRelativeTo(null);
		verificando.setVisible(true);
		String sql = "select * from contasjuridicas where nomedaempresa = '" + valor + "';";
		PreparedStatement stm = null;
		boolean retorno = false;
		try {
			stm = conexao.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultado = null;
		try {
			resultado = stm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (resultado.next()) {
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		verificando.dispose();
		return retorno;
	}
}`

O comando que eu digito e é retornado um campo vazio é o seguinte:
SELECT senha, cast(AES_DECRYPT(senha,'key')as char) decodificado FROM contasfisicas;
Alguém pode me ajudar a resolver esse problema?

22 Respostas

roben

Me parece que você esta usando funções do banco para criptografar a senha. Procure na API do Java ou alguma bliblioteca que faça isso. Armazene a senha em um campo tipo VARCHAR(255). Você não precisa saber a senha do usuário. Use hash de mão única O usuário digita a senha:

senha124566

O código Java gera o hash

0xxg2hgfyrgfyr6764567456hfrhg

Você salva no banco

Depois quando o usuário digitar novamente, você compara
hash com hash

0xxg2hgfyrgfyr6764567456hfrhg = 0xxg2hgfyrgfyr6764567456hfrhg

Pesquise sobre a API: javax.security


Veja este artigo: Guardando senhas criptografadas em Java

Thallysson

Bom, como eu falei eu já tentei fazer isso no java, não consegui, porque eu registro um hash e na hora de fazer o login, a senha criptografada da diferente da que está no banco mesmo sendo correta, e eu estava usando essa api.

Thallysson

Antes eu havia feito essa classe para isso:

package objetos;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class CriptografarSenha {
	public static String criptografar(String senha) {
		KeyGenerator gerador;
		try {
			gerador = KeyGenerator.getInstance("AES");
			SecretKey secreta = gerador.generateKey();
			Cipher cifrador;
			cifrador = Cipher.getInstance("AES");
			cifrador.init(Cipher.ENCRYPT_MODE, secreta);
			byte[] senhacriptografada = cifrador.doFinal(senha.getBytes());
			return new String(senhacriptografada);
		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException
				| BadPaddingException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static String descriptografar(String senha) {
		KeyGenerator gerador;
		try {
			gerador = KeyGenerator.getInstance("AES");
			SecretKey secreta = gerador.generateKey();
			Cipher cifrador;
			cifrador = Cipher.getInstance("AES");
			cifrador.init(Cipher.DECRYPT_MODE, secreta);
			byte[] senhadescriptografada = cifrador.doFinal(senha.getBytes());
			return new String(senhadescriptografada);
		} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException
				| BadPaddingException e) {
			e.printStackTrace();
		}
		return null;
	}
}
roben

Analisando o código, notei que o algoritimo AES gera uma hash diferente independentemente da senha ser a mesma. Use este aqui, que é um hash de mão única. É um algoritimo de 256 bits.

Fiz a classe para você, basta testar.

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

    public class Crypt {
        
        public static String hash(String password) {
            
            StringBuilder hexString = new StringBuilder();
            
            // concatenado com a senha do usuário, torna a senha mais segura
            // escolha o valor que quiser
            String salt = "x--;=-=0245007bx///;-l;0x0900--xy76-=[[]"; 
            
            MessageDigest algorithm = null;
            byte messageDigest[] = null;
            
            try {
                
                // concatena a senha do usuário com o salt
                password += salt;
                
                // seleciona o algoritmo de criptografia de mão única
                algorithm = MessageDigest.getInstance("SHA-256");
                
                // criptografa a senha (gera o hash), byte por byte
                messageDigest = algorithm.digest(password.getBytes("UTF-8"));
                
                // concatena os bytes em hexString
                for (byte b : messageDigest) {
                    hexString.append(String.format("%02X", 0xFF & b));
                }
                
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        
            // converte para string e retorna o resultado
            return hexString.toString();    
        }
    }

    // Criei uma classe para teste
    public class CryptTest {
        public static void main(String[] args) {
            
            String password1 = Crypt.hash("senha123");
            
            String password2 = Crypt.hash("senha123");
            
            System.out.println(password1);
            System.out.println("\n\n");
            System.out.println(password2);
            
            if(!password1.equals(password2)) {
                System.out.println("Senha inválida!");
                return;
            }
            
            System.out.println("Senha correta!");
        }
    }
Thallysson

Eu fiz, tudo funcionou corretamente, porém a senha do login da diferente da do registro.

Thallysson

Para ser mais facil:

Classe do login:

package objetos;

import java.io.File;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import ftp.FTP;
import mysql.ComunicacaoBanco;

public class ObjetoLogin {
	ComunicacaoBanco banco;
	UsuarioFisico loginfisico = new UsuarioFisico();
	UsuarioJuridico loginjuridico = new UsuarioJuridico();

	boolean tipoLogin = true;

	public ObjetoLogin() {
		banco = new ComunicacaoBanco();
	}

	public String Logar(String nome, String senha) {
		String sql = "SELECT * FROM contasfisicas WHERE nomedeusuario='"+nome+"';";
		PreparedStatement executar = null;
		ResultSet resultado;
		try {
			executar = ComunicacaoBanco.conexao.prepareStatement(sql);
			resultado = executar.executeQuery();
			if (resultado.next()) {
				if (resultado.getString(6).equals(CriptografarSenha.criptografar(senha))) {
					loginfisico.setNomeDeUsuario(resultado.getString(2));
					loginfisico.setNome(resultado.getString(3));
					loginfisico.setSobrenome(resultado.getString(4));
					loginfisico.setEmail(resultado.getString(5));
					loginfisico.setSenha(resultado.getString(18));
					loginfisico.setNasc(resultado.getDate(7));
					loginfisico.setTelefone(resultado.getString(8));
					String sexo = resultado.getString(9);
					if (sexo == "M") {
						loginfisico.setSexo(true);
					} else if (sexo == "F") {
						loginfisico.setSexo(false);
					}
					loginfisico.setNacionalidade(resultado.getString(10));
					loginfisico.setCep(resultado.getInt(11));
					loginfisico.setCpf(resultado.getInt(12));
					loginfisico.setSobre(resultado.getString(13));
					if (resultado.getString(14) != null) {
						FTP ftp = new FTP();
						ftp.download("localhost", "eu", "thallysson",
								"/TKF/Physical-Accounts/" + loginfisico.getNomeDeUsuario() + "/perfil");
						loginfisico.setFoto(FTP.arquivo);
					}
					try {
						String codigo = resultado.getString(16);
						String pergunta = resultado.getString(17);
						if (codigo != null && pergunta != null) {
							loginfisico.setCodigo(codigo);
							loginfisico.setPergunta(pergunta);
						}
					} catch (NullPointerException e) {
						e.printStackTrace();
					}
					System.out.println(loginfisico.getNomeDeUsuario() + "\n" + loginfisico.getNome() + "\n"
							+ loginfisico.getSobrenome() + "\n" + loginfisico.getEmail() + "\n" + loginfisico.getSenha()
							+ "\n" + loginfisico.getNasc() + "\n" + loginfisico.getTelefone() + "\n"
							+ loginfisico.getSexo() + "\n" + loginfisico.getNacionalidade() + "\n"
							+ loginfisico.getCep() + "\n" + loginfisico.getCpf() + "\n" + loginfisico.getSobre() + "\n"
							+ loginfisico.getFoto().toString() + "\n" + loginfisico.getCodigo() + "\n"
							+ loginfisico.getPergunta() + "\n");
					tipoLogin = true;
					return "lf sucesso";
				} else {
					System.out.println(CriptografarSenha.criptografar(senha));
					System.out.println(resultado.getString(6));
					return "lf fracasso autentificacao";
				}
			} else {
				sql = "SELECT * FROM contasjuridicas WHERE nomedaempresa='" + nome + "'";
				executar = ComunicacaoBanco.conexao.prepareStatement(sql);
				resultado = executar.executeQuery();
				if (resultado.next()) {
					if (resultado.getString(4).equals(CriptografarSenha.criptografar(senha))) {
						loginjuridico.setNomeResp(resultado.getString(2));
						loginjuridico.setNome(resultado.getString(3));
						loginjuridico.setSenha(resultado.getString(4));
						loginjuridico.setNacionalidade(resultado.getString(5));
						if (resultado.getInt(6) != 0) {
							loginjuridico.setCnpj(resultado.getInt(6));
						}
						loginjuridico.setDescricao(resultado.getString(7));
						if (resultado.getString(8) != null) {
							FTP ftp = new FTP();
							ftp.download("localhost", "eu", "thallysson",
									"/TKF/Legal-Accounts/" + loginjuridico.getNome() + "/perfil");
							loginjuridico.setLogo(new File(FTP.path));
						}
						loginjuridico.setEmail(resultado.getString(9));
						loginjuridico.setTelefone(resultado.getString(10));
						if (resultado.getString(12) != null) {
							loginjuridico.setCodigo(resultado.getString(12));
						}
						if (resultado.getString(13) != null) {
							loginjuridico.setPergunta(resultado.getString(13));
						}
						String pesquisafuncionarios = "SELECT *, CAST(AES_DECRYPT(f.senha, f.nome) AS CHAR(10)) decodificado FROM funcionarios as f where " + "empresatkfid="
								+ resultado.getInt(1) + ";";
						PreparedStatement stm = ComunicacaoBanco.conexao.prepareStatement(pesquisafuncionarios);
						ResultSet result = stm.executeQuery();
						ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
						while (result.next()) {
							Funcionario funcionario = new Funcionario();
							funcionario.setNome(result.getString(3));
							funcionario.setSenha(result.getString(9));
							funcionario.setNasc(result.getString(5));
							if (result.getString(6) == "M") {
								funcionario.setSexo("Masculino");
							} else if (result.getString(6) == "F") {
								funcionario.setSexo("Feminino");
							}
							funcionario.setNacionalidade(result.getString(7));
							if (result.getString(8) != null) {
								funcionario.setCpf(result.getString(8));
							} else {
								funcionario.setCpf(null);
							}
							if (result.getString(9) != null) {
								FTP ftp = new FTP();
								ftp.download("localhost", "eu", "thallysson", "/TKF/Legal-Accounts/"
										+ loginjuridico.getNome() + "/" + funcionario.getNome() + "/perfil");
								funcionario.setImagem(FTP.arquivo);
							} else {
								funcionario.setImagem(null);
							}
							funcionarios.add(funcionario);
						}
						loginjuridico.setFuncionarios(funcionarios);
						for (Funcionario funcionario1 : funcionarios) {
							System.out.println();
							System.out.println(funcionario1.getNome());
							System.out.println(funcionario1.getSenha());
							System.out.println(funcionario1.getNasc());
							System.out.println(funcionario1.getSexo());
							System.out.println(funcionario1.getNacionalidade());
							System.out.println(funcionario1.getCpf());
							System.out.println(funcionario1.getImagem().toString());
							System.out.println();
						}
						System.out.println(loginjuridico.getNomeResp() + "\n" + loginjuridico.getNome() + "\n"
								+ loginjuridico.getSenha() + "\n" + loginjuridico.getNacionalidade() + "\n"
								+ loginjuridico.getCnpj() + "\n" + loginjuridico.getDescricao() + "\n"
								+ loginjuridico.getLogo().toString() + "\n" + loginjuridico.getEmail() + "\n"
								+ loginjuridico.getTelefone() + "\n" + loginjuridico.getCodigo() + "\n"
								+ loginjuridico.getPergunta() + "\n");
						tipoLogin = false;
						return "lj sucesso";
					} else {
						return "lj fracasso autentificacao";
					}
				} else {
					return "usuario inesistente";
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return "bug";
	}
}

Classe do registro:

package mysql;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import LookAndFeel.TKFLookAndFeel;
import ftp.FTP;
import objetos.CriptografarSenha;
import objetos.Funcionario;
import objetos.UsuarioFisico;
import objetos.UsuarioJuridico;

public class ComunicacaoBanco implements ActionListener {
	private final String url = "jdbc:mysql://localhost/tkf";
	public static Connection conexao = null;
	static JDialog registrando = new JDialog();
	private TKFLookAndFeel look = new TKFLookAndFeel();
	static JDialog registrou = new JDialog();
	boolean bexecutar = true;
	boolean erro2 = true;
	JDialog erro = new JDialog();
	JButton terminar = new JButton("Ok, entendi");
	JButton ok = new JButton("OK");
	public static JProgressBar progressBar = new JProgressBar();

	public ComunicacaoBanco() {
		try {
			conexao = DriverManager.getConnection(url, "root", "thallysson");
			System.out.println("Conectou");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void Registrar(UsuarioFisico usuario) {
		String sql = "INSERT INTO contasfisicas VALUES(default,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
		PreparedStatement executar = null;
		try {
			executar = conexao.prepareStatement(sql);
			
			if (usuario.getNomeDeUsuario() != null) {
				executar.setString(1, usuario.getNomeDeUsuario());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome de usuario nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getNome() != null) {
				executar.setString(2, usuario.getNome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getSobrenome() != null) {
				executar.setString(3, usuario.getSobrenome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o sobrenome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getEmail() != null) {
				executar.setString(4, usuario.getEmail());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o email nao pode seu nulo");
				bexecutar = false;
			}
			
			if (usuario.getSenha() != null) {
				executar.setString(5, CriptografarSenha.criptografar(usuario.getSenha()));
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a senha nao pode seu nula");
				bexecutar = false;
			}
			if (usuario.getNasc() != null) {
				executar.setDate(6, new java.sql.Date(usuario.getNasc().getTime()));
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a data de nascimento nao pode seu nula");
				bexecutar = false;
			}
			executar.setString(7, usuario.getTelefone());
			if (usuario.getSexo()) {
				executar.setString(8, "M");
			} else {
				executar.setString(8, "F");
			}
			if (usuario.getNacionalidade() != null) {
				executar.setString(9, usuario.getNacionalidade());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a nacionalidade nao pode seu nula");
				bexecutar = false;
			}
			if (usuario.getCep() != 0) {
				executar.setInt(10, usuario.getCep());
			} else {
				executar.setString(10, null);
			}
			if (usuario.getCpf() != 0) {
				executar.setInt(11, usuario.getCpf());
			} else {
				executar.setString(11, null);
			}
			if (usuario.getSobre() != null && usuario.getSobre() != "") {
				executar.setString(12, usuario.getSobre());
			} else {
				executar.setString(12, null);
			}
			try {
				if (usuario.getFoto().toString() != null) {
					JDialog processoenviar = new JDialog();
					String nomecompleto = usuario.getFoto().getName();
					String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."), nomecompleto.length());
					FTP upload = new FTP();
					if (bexecutar) {
						new Thread(new Runnable() {
							public void run() {
								processoenviar.setLayout(new BorderLayout());
								processoenviar.setUndecorated(true);
								processoenviar.setModal(true);
								JLabel ti = new JLabel("Enviando sua imagem:");
								JPanel contentpanelz = new JPanel(new BorderLayout());
								contentpanelz.add(ti, BorderLayout.NORTH);
								progressBar.setPreferredSize(new Dimension(0, 30));
								progressBar.setMinimum(0);
								progressBar.setValue(0);
								progressBar.setStringPainted(true);
								contentpanelz.add(progressBar, BorderLayout.CENTER);
								processoenviar.setContentPane(contentpanelz);
								look.formatar(processoenviar, null);
								processoenviar.setLocationRelativeTo(null);
								processoenviar.setVisible(true);
							}
						}).start();
						upload.upload("localhost", "/TKF/Physical-Accounts/" + usuario.getNomeDeUsuario(),
								usuario.getFoto().toString(), "eu", "thallysson", usuario.getNomeDeUsuario());
					}
					String caminhoImagem = "/TKF/Physical-Accounts/" + usuario.getNomeDeUsuario() + "/perfil"
							+ extensao;
					executar.setString(13, caminhoImagem);
					processoenviar.dispose();
				}
			} catch (NullPointerException erro) {
				executar.setString(13, null);
				System.out.println("nullpointerexception");
			}
			executar.setDate(14, new java.sql.Date(new Date().getTime()));
			executar.setString(15, usuario.getCodigo());
			executar.setString(16, usuario.getPergunta());
			if (bexecutar) {
				new Thread(new Runnable() {
					public void run() {
						JPanel content = new JPanel(new BorderLayout());
						registrando.setUndecorated(true);
						JLabel label = new JLabel("Registrando seus dados...");
						content.add(label, BorderLayout.CENTER);
						content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
						registrando.setContentPane(content);
						look.formatar(registrando, null);
						registrando.setLocationRelativeTo(null);
						registrando.setVisible(true);
					}
				}).start();
				try {
					executar.executeUpdate();
				} catch (Exception erro) {
					erro.printStackTrace();
					erro2 = false;
					registrando.dispose();
				}
			} else {
				erro2 = false;
			}

			executar.close();
			if (erro2) {
				ok.addActionListener(this);
				registrou.setModal(true);
				JPanel content = new JPanel(new BorderLayout());
				JPanel content2 = new JPanel(new FlowLayout());
				registrou.setUndecorated(true);
				JLabel label2 = new JLabel("Seus dados foram registrados com exito!");
				content.add(label2, BorderLayout.CENTER);
				content2.add(ok);
				content.add(content2, BorderLayout.SOUTH);
				content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
				registrou.setContentPane(content);
				look.formatar(registrou, null);
				registrou.setLocationRelativeTo(null);
				registrou.setVisible(true);
			} else {
				JLabel rotulo = new JLabel(
						"<html><center>Ocorreu um erro desconhecido ao registrar seus dados,<br/>Tente novamente</center><html>");
				terminar.addActionListener(this);
				JPanel pterminar = new JPanel(new FlowLayout());
				erro.setLayout(new BorderLayout());
				erro.add(rotulo, BorderLayout.CENTER);
				pterminar.add(terminar);
				erro.add(pterminar, BorderLayout.SOUTH);
				look.formatar(erro, null);
				erro.setLocationRelativeTo(null);
				erro.setVisible(true);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void Registrar(UsuarioJuridico usuario, ArrayList<Funcionario> funcionarios) {
		String sql = "INSERT INTO contasjuridicas VALUES(default,?,?,?,?,?,?,?,?,?,?,?,?);";
		PreparedStatement executar = null;
		try {
			executar = conexao.prepareStatement(sql);
			if (usuario.getNomeResp() != null) {
				executar.setString(1, usuario.getNomeResp());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nomeresp nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getNome() != null) {
				executar.setString(2, usuario.getNome());
			} else {
				executar.close();
				System.out.println("A operacao falhou por que o nome nao pode seu nulo");
				bexecutar = false;
			}
			if (usuario.getSenha() != null) {
				executar.setString(3, CriptografarSenha.criptografar(usuario.getSenha()));
			} else {
				executar.close();
				System.out.println("A operacao falhou por que a senha nao pode seu nula");
				bexecutar = false;
			}
			executar.setString(4, usuario.getNacionalidade());
			if (usuario.getCnpj() != 0) {
				executar.setInt(5, usuario.getCnpj());
			} else {
				executar.setString(5, null);
			}
			if (usuario.getDescricao() != null) {
				executar.setString(6, usuario.getDescricao());
			}
			try {
				if (usuario.getLogo() != null) {
					JDialog processoenviar = new JDialog();
					String nomecompleto = usuario.getLogo().getName();
					String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."), nomecompleto.length());
					FTP upload = new FTP();
					if (bexecutar) {
						new Thread(new Runnable() {
							public void run() {
								processoenviar.setLayout(new BorderLayout());
								processoenviar.setUndecorated(true);
								processoenviar.setModal(true);
								JLabel ti = new JLabel("Enviando sua imagem:");
								JPanel contentpanelz = new JPanel(new BorderLayout());
								contentpanelz.add(ti, BorderLayout.NORTH);
								progressBar.setPreferredSize(new Dimension(0, 30));
								progressBar.setMinimum(0);
								progressBar.setValue(0);
								progressBar.setStringPainted(true);
								contentpanelz.add(progressBar, BorderLayout.CENTER);
								processoenviar.setContentPane(contentpanelz);
								look.formatar(processoenviar, null);
								processoenviar.setLocationRelativeTo(null);
								processoenviar.setVisible(true);
							}
						}).start();
						upload.upload("localhost", "/TKF/Legal-Accounts/" + usuario.getNome(),
								usuario.getLogo().toString(), "eu", "thallysson", usuario.getNome());
					}
					String caminhoImagem = "/TKF/Legal-Accounts/" + usuario.getNome() + "/perfil" + extensao;
					executar.setString(7, caminhoImagem);
					processoenviar.dispose();
				} else {
					executar.setString(7, null);
				}
			} catch (NullPointerException erro) {
				erro.printStackTrace();
				System.out.println("Ocorreu u null pointer exception");
			}

			if (usuario.getEmail() != null) {
				executar.setString(8, usuario.getEmail());
			} else {
				executar.close();
				System.out.println("A operacao falhou porque o email nao pode ser nulo");
				bexecutar = false;
			}
			executar.setString(9, usuario.getTelefone());
			executar.setDate(10, new java.sql.Date(new Date().getTime()));
			if (usuario.getCodigo() != null) {
				executar.setString(11, usuario.getCodigo());
			} else {
				executar.setString(11, null);
			}
			if (usuario.getPergunta() != null) {
				executar.setString(12, usuario.getPergunta());
			} else {
				executar.setString(12, null);
			}
			if (bexecutar) {
				new Thread(new Runnable() {
					public void run() {
						JPanel content = new JPanel(new BorderLayout());
						registrando.setUndecorated(true);
						JLabel label = new JLabel("Registrando seus dados...");
						content.add(label, BorderLayout.CENTER);
						content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
						registrando.setContentPane(content);
						look.formatar(registrando, null);
						registrando.setLocationRelativeTo(null);
						registrando.setVisible(true);
					}
				}).start();
				try {
					executar.executeUpdate();
				} catch (Exception erro) {
					erro.printStackTrace();
					erro2 = false;
					registrando.dispose();
				}
			} else {
				erro2 = false;
			}

			executar.close();
			if (erro2) {
				ok.addActionListener(this);
				registrou.setModal(true);
				JPanel content = new JPanel(new BorderLayout());
				JPanel content2 = new JPanel(new FlowLayout());
				registrou.setUndecorated(true);
				JLabel label2 = new JLabel("Seus dados foram registrados com exito!");
				content.add(label2, BorderLayout.CENTER);
				content2.add(ok);
				content.add(content2, BorderLayout.SOUTH);
				content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
				registrou.setContentPane(content);
				look.formatar(registrou, null);
				registrou.setLocationRelativeTo(null);
				registrou.setVisible(true);
			} else {
				JLabel rotulo = new JLabel(
						"<html><center>Ocorreu um erro desconhecido ao registrar seus dados,<br/>Tente novamente</center><html>");
				terminar.addActionListener(this);
				JPanel pterminar = new JPanel(new FlowLayout());
				erro.setLayout(new BorderLayout());
				erro.add(rotulo, BorderLayout.CENTER);
				pterminar.add(terminar);
				erro.add(pterminar, BorderLayout.SOUTH);
				look.formatar(erro, null);
				erro.setLocationRelativeTo(null);
				erro.setVisible(true);
			}
			if (funcionarios != null) {
				String sql2 = "SELECT LAST_INSERT_ID() INTO @id;";
				PreparedStatement smt = conexao.prepareStatement(sql2);
				ResultSet rs = smt.executeQuery();
				if (rs.next()) {
					int idempresa = rs.getInt(1);
					System.out.println("id = " + idempresa);
					for (Funcionario funcionario : funcionarios) {
						if (funcionario.getNome() != null && funcionario.getSenha() != null) {
							String sql3 = "INSERT INTO funcionarios VALUES(default,@id,?,?,?,?,?,?,?)";
							PreparedStatement inserirfunc = conexao.prepareStatement(sql3);
							String nome = funcionario.getNome();
							nome = nome.substring(0, 1).toUpperCase().concat(nome.substring(1));
							inserirfunc.setString(1, nome);
							inserirfunc.setString(2, CriptografarSenha.criptografar(funcionario.getSenha()));
							SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
							java.util.Date dataUtil = null;
							try {
								dataUtil = df.parse(funcionario.getNasc());
							} catch (ParseException e) {
								e.printStackTrace();
							}
							inserirfunc.setDate(3, new java.sql.Date(dataUtil.getTime()));
							if (funcionario.getSexo() == "Masculino") {
								inserirfunc.setString(4, "M");
							} else if (funcionario.getSexo() == "Feminino") {
								inserirfunc.setString(4, "F");
							}
							inserirfunc.setString(5, funcionario.getNacionalidade());
							try {
								if (funcionario.getCpf().contains("0") || funcionario.getCpf().contains("1")
										|| funcionario.getCpf().contains("2") || funcionario.getCpf().contains("3")
										|| funcionario.getCpf().contains("4") || funcionario.getCpf().contains("5")
										|| funcionario.getCpf().contains("6") || funcionario.getCpf().contains("7")
										|| funcionario.getCpf().contains("8") || funcionario.getCpf().contains("9")) {

									String cpf = funcionario.getCpf();
									cpf = cpf.replace(".", "");
									cpf = cpf.replace("-", "");
									inserirfunc.setInt(6, Integer.parseInt(cpf));
								} else {
									inserirfunc.setString(6, null);
								}
							} catch (NullPointerException erro) {
								inserirfunc.setString(6, null);
							}
							if (funcionario.getImagem() != null) {
								JDialog processoenviar = new JDialog();
								String nomecompleto = funcionario.getImagem().getName();
								String extensao = nomecompleto.substring(nomecompleto.lastIndexOf("."),
										nomecompleto.length());
								FTP upload = new FTP();
								if (bexecutar) {
									new Thread(new Runnable() {
										public void run() {
											processoenviar.setLayout(new BorderLayout());
											processoenviar.setUndecorated(true);
											processoenviar.setModal(true);
											JLabel ti = new JLabel("Enviando sua imagem:");
											JPanel contentpanelz = new JPanel(new BorderLayout());
											contentpanelz.add(ti, BorderLayout.NORTH);
											progressBar.setPreferredSize(new Dimension(0, 30));
											progressBar.setMinimum(0);
											progressBar.setValue(0);
											progressBar.setStringPainted(true);
											contentpanelz.add(progressBar, BorderLayout.CENTER);
											processoenviar.setContentPane(contentpanelz);
											look.formatar(processoenviar, null);
											processoenviar.setLocationRelativeTo(null);
											processoenviar.setVisible(true);
										}
									}).start();
									upload.upload("localhost",
											"/TKF/Legal-Accounts/" + usuario.getNome() + "/Workers/"
													+ funcionario.getNome(),
											funcionario.getImagem().toString(), "eu", "thallysson", usuario.getNome());
								}
								String caminhoImagem = "/TKF/Legal-Accounts/" + usuario.getNome() + "/Workers/"
										+ funcionario.getNome() + "/perfil" + extensao;
								inserirfunc.setString(7, caminhoImagem);
								processoenviar.dispose();
							} else {
								inserirfunc.setString(7, null);
							}
							if (bexecutar) {
								inserirfunc.executeUpdate();
							}
						}
					}
				}
			}
		} catch (SQLException erro) {
			erro.printStackTrace();
		}
	}

	public boolean verificaRegistroFisico(String valor) {
		JDialog verificando = new JDialog();
		verificando.setUndecorated(true);
		JPanel content = new JPanel(new BorderLayout());
		content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
		JLabel mensagen = new JLabel("Verificando Registro");
		content.add(mensagen, BorderLayout.CENTER);
		verificando.setContentPane(content);
		look.formatar(verificando, null);
		verificando.setLocationRelativeTo(null);
		verificando.setVisible(true);
		String sql = "select * from contasfisicas where nomedeusuario = '" + valor + "';";
		PreparedStatement stm = null;
		boolean retorno = false;
		try {
			stm = conexao.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultado = null;
		try {
			resultado = stm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (resultado.next()) {
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		verificando.dispose();
		return retorno;
	}

	public void actionPerformed(ActionEvent evento) {
		if (evento.getSource() == terminar) {
			erro.dispose();
		}
		if (evento.getSource() == ok) {
			registrou.dispose();
			registrando.dispose();
		}
	}

	public boolean verificaRegistroJuridico(String valor) {
		JDialog verificando = new JDialog();
		verificando.setUndecorated(true);
		JPanel content = new JPanel(new BorderLayout());
		content.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
		JLabel mensagen = new JLabel("Verificando Registro");
		content.add(mensagen, BorderLayout.CENTER);
		verificando.setContentPane(content);
		look.formatar(verificando, null);
		verificando.setLocationRelativeTo(null);
		verificando.setVisible(true);
		String sql = "select * from contasjuridicas where nomedaempresa = '" + valor + "';";
		PreparedStatement stm = null;
		boolean retorno = false;
		try {
			stm = conexao.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultado = null;
		try {
			resultado = stm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (resultado.next()) {
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		verificando.dispose();
		return retorno;
	}
}

Classe da criptografia:

package objetos;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CriptografarSenha {
	public static String criptografar(String senha) {
		StringBuilder hexString = new StringBuilder();
        String salt = "x--;=-=0245007bx///;-l;0x0900--xy76-=[[]"; 
        MessageDigest algorithm = null;
        byte messageDigest[] = null;
        try {
        	senha += salt;
            algorithm = MessageDigest.getInstance("SHA-256");
            messageDigest = algorithm.digest(senha.getBytes("UTF-8"));
            for (byte b : messageDigest) {
                hexString.append(String.format("%02X", 0xFF & b));
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return hexString.toString();
	}
}
roben

Isso. Na classe de teste, podemos observar que ele sempre gera o mesmo hash quando a senha
é a mesma. Armazene na base quando o usuaŕio registrar a senha, depois gere o hash quando ele for logar e compare com o que estiver no SGDB.

Thallysson

É isso que eu estou fazendo, digitei a mesma senha e o hash foi diferente com esse código, só uma pergunta, o que é SGBD?

roben

SGBD = Sistema Gerenciador de Banco de Dados (Oracle, PostgreSQL, MySQL, SQL Server, Firebird, MariaDB e etc…).

Você testou com a classe de teste que criei?
Preciso ver o seu código completo.

Thallysson

Você leu as classes inteiras? Porque não sei se percebeu mas tem uma parte do código da classe ObjetoLogin onde eu comparo a senha digitada criptografada com a senha que está no banco, é exatamente o que você fez no exemplo só que de uma maneira diferente.

roben

Tem um problema aqui.
Você esta pegando a senha com getString(18), porém esta comparando com getString(6).

if (resultado.getString(6).equals(CriptografarSenha.criptografar(senha))) {
                    loginfisico.setNomeDeUsuario(resultado.getString(2));
                    loginfisico.setNome(resultado.getString(3));
                    loginfisico.setSobrenome(resultado.getString(4));
                    loginfisico.setEmail(resultado.getString(5));
                    loginfisico.setSenha(resultado.getString(18));
                    loginfisico.setNasc(resultado.getDate(7));
                    loginfisico.setTelefone(resultado.getString(8));
                    String sexo = resultado.getString(9);
                    if (sexo == "M") {
Thallysson

É não sei o que deu em mim para fazer isso, o campo senha é o 6 e minha tabela tem 17 colunas, mas corrigindo isso as senhas continuam sendo diferentes.

roben

Coloquei um System.out para verificar o que esta vindo:

if (resultado.getString(6).equals(CriptografarSenha.criptografar(senha))) {
                    
    System.out.println(resultado.getString(6)); // vem do banco
    
    System.out.println(CriptografarSenha.criptografar(senha)); // vem da tela 
     
    loginfisico.setNomeDeUsuario(resultado.getString(2));
    loginfisico.setNome(resultado.getString(3));
    loginfisico.setSobrenome(resultado.getString(4));
    loginfisico.setEmail(resultado.getString(5));
    loginfisico.setSenha(resultado.getString(6));
    loginfisico.setNasc(resultado.getDate(7));
    loginfisico.setTelefone(resultado.getString(8));
    String sexo = resultado.getString(9);
Thallysson

O resultado é o seguinte:

Primeira senha:

CC6A57F48CC1D95FEF3C93E27B687FF92B681C5BB2C8A3A1727E4A32642CB32A

Segunda senha:

E721C993048E7987C1F961403AB50F4A346AB697F3F3D75FB56AF7F5072CF72E
roben

Qual valor esta vindo da tela? O que o usuário digitou antes de criptografar?

Thallysson

Não, depois de criptografar

Thallysson

Não sei se desistiram do tópico, mas só para avisar, eu ainda não consegui resolver o problema.

roben

Conseguiu resolver?

Diegosimoncarmona

Utiliza Md5heX do DigestUtils, bem mais fácil, e não terá problemas

Doc
https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html

cviniciusm

Olá,

Sugiro que leia: Java Cryptography Architecture (JCA) Reference Guide

E a parte relevante: The SealedObject Class

“Note that you do not have to worry about storing or transferring any algorithm parameters for use by the decryption operation if you use the SealedObject class. This class attaches the parameters used for sealing (encryption) to the encrypted object contents, and uses the same parameters for unsealing (decryption).”

Como o texto acima é bem técnico, sem gírias, então não é difícil de ler, mas é mais fácil ainda utilizar o Tradutor do Google:
“Note que você não precisa se preocupar com o armazenamento ou transferência de quaisquer parâmetros do algoritmo para uso pela operação de decodificação se você usar a classe SealedObject. Esta classe atribui os parâmetros usados para a selagem (criptografia) com o conteúdo de objetos criptografados, e usa os mesmos parâmetros para unsealing (decodificação).”

Ou seja, um objeto da classe SealedObject contém não somente o texto criptografado mas os parâmetros utilizados na criptografia também, e assim facilita a decriptação.

Sem utilizar a classe SealedObject, você tem que armazenar o texto criptografado em um campo e os parâmetros de criptografia em um ou mais campos do banco de dados para conseguir realizar a decriptação com sucesso.

P.S.: estudar o domínio (teoria / regras de negócio) da aplicação específica ajuda bastante.

Thallysson

Opa…Eu consegui resolver sim. Só que faz muito tempo e e eu não tenho mais o código fonte aqui, mas se eu não me engano eu estava pegando a senha da JTextField nome kkk.

staroski

Essa demora é o preço que se paga por não postar o código completo… :wink:

Criado 23 de junho de 2016
Ultima resposta 7 de dez. de 2016
Respostas 22
Participantes 5