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?