identar texto pré-formatado por 4 espaços
Qual a melhor maneira de criptografar um senha em Java, e depois fazer o usuário acessar com a senha que ele digitou. EX senha 1234, vai dar mais iu menos isso A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3
A pergunta é, como o usuário vai saber essa senha?
identar texto pré-formatado por 4 espaços
rivate void Adicionar(){
String sql = “insert into tbatendente(Nomeate,endate,Telefone,Cpf,email,senha,login,perfil)”
+ " values(?,?,?,?,?,?,?,?)";
try {
pst=conexao.prepareStatement(sql);
//pst.setString(1,idate.getText() );
pst.setString(1,txtNomeAtendente.getText());
pst.setString(2,txtEndereAtendente.getText());
pst.setString(3,txtFoneAtendente.getText());
pst.setString(4,txtCpfAtendente.getText());
pst.setString(5, txtEmail.getText());
pst.setString(6, txtSenhaAtendente.getText());
pst.setString(7, txtLoginAtendente.getText());
pst.setString(8, cboUsoPerfil.getSelectedItem().toString());
if((txtCpfAtendente.getText().isEmpty())||(txtNomeAtendente.getText().isEmpty())||(txtLoginAtendente.getText().isEmpty())
||(txtSenhaAtendente.getText().isEmpty())){
JOptionPane.showMessageDialog(null," Todos os Campos Marcados com *, são Obrigatórios");
}else{
int adicionado = pst.executeUpdate();
if(adicionado > 0){
JOptionPane.showMessageDialog(null,"Usuario Cadastrodo com Sucesso!!!");
idate.setText(null);
txtNomeAtendente.setText(null);
txtEndereAtendente.setText(null);
txtEmail.setText(null);
txtCpfAtendente.setText(null);
txtFoneAtendente.setText(null);
cboUsoPerfil.setSelectedItem(null);
txtLoginAtendente.setText(null);
txtSenhaAtendente.setText(null);
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e);
}
O usuário não precisa saber a senha criptografada porque para ele a senha continua sendo a original, ou seja, quando ele fazer login, vai digitar 1234 (por exemplo), seu código vai receber o que foi digitado, converter na versão criptografada e comparar com o valor do banco (que também é armazenado criptografado).
Abraço.
1 curtida
ai que esta, eu digito 1234 e não entra no sistema, to usando MD5
ai que esta, eu digito 1234 e não entra no sistema, to usando MD5
O que você quer dizer com “não entra no sistema”? Não está gravando no banco? Ou o login falha?
O código que você postou só mostra a parte que grava um novo usuário no banco. Ele está sendo gravado corretamente (especialmente os campos de login senha)? Se sim, mostre o código onde você compara o que foi digitado no login com o que está no banco.
Faça debug na parte de login, ou adicione mensagens no console (System.out.println) ou em JOptionPanes para saber se os valores comparados são os que realmente precisam ser comparados.
Abraço.
1 curtida
Ate esta parte esta perfeito, eu digo pra descriptografar, pois o usuário tem que digitar 1234 novamente, não sei se pude explicar bem
private void Adicionar(){
String sql = “insert into tbatendente(Nomeate,endate,Telefone,Cpf,email,senha,login,perfil)”
+ " values(?,?,?,?,?,?,?,?)";
String senha = txtSenhaAtendente.getText();
try {
MessageDigest algorithm = MessageDigest.getInstance("SHA-256");
byte messageDigest[] = algorithm.digest(senha.getBytes("UTF-8"));
StringBuilder hexString = new StringBuilder();
for (byte b : messageDigest) {
hexString.append(String.format("%02X", 0xFF & b));
}
String senhap = hexString.toString();
pst=conexao.prepareStatement(sql);
//pst.setString(1,idate.getText() );
pst.setString(1,txtNomeAtendente.getText());
pst.setString(2,txtEndereAtendente.getText());
pst.setString(3,txtFoneAtendente.getText());
pst.setString(4,txtCpfAtendente.getText());
pst.setString(5, txtEmail.getText());
pst.setString(6, senhap);
pst.setString(7, txtLoginAtendente.getText());
pst.setString(8, cboUsoPerfil.getSelectedItem().toString());
if((txtCpfAtendente.getText().isEmpty())||(txtNomeAtendente.getText().isEmpty())||(txtLoginAtendente.getText().isEmpty())
||(txtSenhaAtendente.getText().isEmpty())){
JOptionPane.showMessageDialog(null," Todos os Campos Marcados com *, são Obrigatórios");
Você não deve nem precisa descriptografar o que está no banco. Você criptografa o que o usuário digitou no login e compara com o que está no banco. Em pseudocódigo, seria mais ou menos algo assim:
boolean tentarFazerLogin(){
String loginDigitado = txtComOLoginDigitadoParaFazerLogin.getText();
String senhaDigitada = txtComASenhaDigitadaParaFazerLogin.getText();
String senhaCriptografadaQueEstaNoBancoDeDados = metodoParaPegarSenhaDoBancoBuscandoPeloLogin(loginDigitado);
String senhaDigitadaCriptografada = metodoQueGeraoMD5OuQualquerHashQueVoceEstejaUsando(senhaDigitada);
if (senhaCriptografadaQueEstaNoBancoDeDados.equals(senhaDigitadaCriptografada) ){
return true; // senha digitada é a correta, permite login
}else{
return false; // senha digitada está errada, não permite login
}
}
Abraço.