[RESOLVIDO] Não quer validar a senha

Pessoal,
o sistema valida o usuário, mas não a senha.
Estou fazendo assim: primeiro instanciei o map na classe Usuarios static Map<String,String> usuarios = new HashMap<String,String>(); e não usei construtor; depois encapsulei usuarios [code] public static Map<String,String> getUsuarios() {
usuarios.put(“root”,DigestUtils.sha256Hex(“senha0”));
usuarios.put(“paulo”,DigestUtils.sha256Hex(“senha1”));
usuarios.put(“maria”,DigestUtils.sha256Hex(“senha2”));
usuarios.put(“alguém”,DigestUtils.sha256Hex(“senha3”));
return usuarios;
}

public void setUsuarios(Map<String,String> usuarios) {
	Usuarios.usuarios = usuarios;
}

[/code] com as entradas dentro; na classe Gerente, o método validar() faz as verificações public static void validar(String usr, String snh){ if(usr.isEmpty()){ JOptionPane.showMessageDialog(login, "Usuário vazio."); Login.ftfUsuario.grabFocus(); } else { if(Usuarios.getUsuarios().containsKey(usr)){ if(snh.isEmpty()){ JOptionPane.showMessageDialog( login,"O campo \"senha\" está vazio."); }else { if(Usuarios.getUsuarios().get(usr).equals(snh)){ registros = new Registros(); registros.setVisible(true); login.setVisible(false); } else { JOptionPane.showMessageDialog( login, "Senha não encontrada" ); } } } else { JOptionPane.showMessageDialog( login,"Senha não encontrada."); } } } mas na hora de validar a senha Usuarios.getUsuarios().get(usr).equals(snh) ele não valida.
Alguém pode me dar uma força aqui?

Agradecido
Lucas Ribeiro

Pelo que percebi, a String snh não está criptografada então sempre serão senhas diferentes.

Faça um teste nesse método:

public static Map&lt;String,String&gt; getUsuarios() {  
    usuarios.put("root",DigestUtils.sha256Hex("senha0"));    
    usuarios.put("paulo",DigestUtils.sha256Hex("senha1"));    
    usuarios.put("maria",DigestUtils.sha256Hex("senha2"));  
    usuarios.put("alguém",DigestUtils.sha256Hex("senha3"));  
    return usuarios;  
} 

Retire todos os DigestUtils.sha256Hex("") e deixe apenas “string pura”.

Se funcionar então você terá de criptografar a senha como falei para fazer as comparações.

mas aí a senha ficaria desprotegida de engenharia reversa.
Lhe agradeço pela informação, mas não há outro jeito?

[quote=lucasribeiro]mas aí a senha ficaria desprotegida de engenharia reversa.
Lhe agradeço pela informação, mas não há outro jeito?[/quote]

É apenas para teste, se depois que você desproteger a senha ele conseguir entrar, você vai saber que é sobre a criptografia, daí você volta o que estava antes e criptografa a senha que está passando para testar.

Além do mais, sobre estar desprotegida, o formato de criptografia que você está usando (sha256) é de “mão dupla” (possível de descriptografar) facilita isso, geralmente usa-se formato md5 (esse é mão única, teoricamente não há reversão).

Puxa! Obrigado pela informação… Isso é importante!
Tá valendo, vou fazer isso. Achei que era para descartar a criptografia, perdão.

[quote=lucasribeiro]Puxa! Obrigado pela informação… Isso é importante!
Tá valendo, vou fazer isso. Achei que era para descartar a criptografia, perdão.[/quote]

Descartar? Nem pensar, hoje em dia com a criptografia já está difícil deixar um sistema seguro, imagine sem usar.

O fato é saber usar um hash que seja difícil de quebrar e como havia dito antes o sha256 facilita mais que o md5 justamente por ser de “mão dupla”.

Valeu, soldiersx13…

Deu certo com o sha256Hex… Agora vou para a mão única. Seria “shaMd5” sem o “Hex”?

Amigo, o cálculo da criptografia é diferente para cada acesso ao software?

Pronto! Md5 aplicado. Sistema funcionando… Valeu

[quote=lucasribeiro]Valeu, soldiersx13…

Deu certo com o sha256Hex… Agora vou para a mão única. Seria “shaMd5” sem o “Hex”?
[/quote]

O “Hex” é uma abreviação de Hexadecimal, ou seja, aumenta a dificuldade em quebrar o hash gerado pois utiliza além dos 10 dígitos comuns (0-9), usa também os códigos de A-F (representando o range de 10 até 15).

Isso você diz com md5 ou sha256? Se for md5, sinceramente eu não sei como o Java se comporta, pois nunca utilizei, mas em php o md5 gera sempre uma chave diferente, daí a comparação é feita pelo sistema comparando as chaves (senhas) para saber se são próximas e assim liberar o acesso, creio eu ser um comportamento padrão da criptografia.

Se você puder compartilhar o trecho de código que você fez (apenas da parte de criptografia e comparação de senhas), assim quem tiver a mesma dúvida que você nem precisa postar outro tópico.

Também uma última dica, se o tópico foi resolvido, é bom editar título do seu primeiro post incluindo um [Resolvido], assim o pessoal do fórum já sabe da situação.

É verdade soldierx13,

e aqui vai…
Enfim, o código ficou assim:

  • na classe Gerente public static void validar(String usr, String snh){ String snh1 = DigestUtils.md5Hex(snh); if(usr.isEmpty()){ JOptionPane.showMessageDialog(login, "Usuário vazio."); Login.ftfUsuario.grabFocus(); } else { if(Usuarios.getUsuarios().containsKey(usr)){ if(snh.isEmpty()){ JOptionPane.showMessageDialog( login,"O campo \"senha\" está vazio."); }else { if(Usuarios.getUsuarios().get(usr).equals(snh1)){ registros = new Registros(); registros.setVisible(true); login.setVisible(false); } else { JOptionPane.showMessageDialog( login, "Senha não encontrada" ); } } } else { JOptionPane.showMessageDialog( login,"Senha não encontrada." ); } } } onde o método validar criptografa a String snh em md5, e armazena na String snh1 String snh1 = DigestUtils.md5Hex(snh); e a validação é feita na condição do if da linha 12 Usuarios.getUsuarios().get(usr).equals(snh1) onde o JFrame principal Registros é instanciado e exbido, junto à ocultação do JDialog Login…
    Já a classe Usuários, onde o método validar(String usr, String snh) buscará os usuário e senha digitados, contém um objeto map<> encapsulado e não contém construtor… [code]import java.util.HashMap;
    import java.util.Map;
    import org.apache.commons.codec.digest.*;

public class Usuarios {

static Map<String,String> usuarios = new HashMap<String,String>();
static String usuario;
String senha;
	
public static Map<String,String> getUsuarios() {
	usuarios.put("root",DigestUtils.md5Hex("senha0"));  
    usuarios.put("paulo",DigestUtils.md5Hex("senha1"));  
    usuarios.put("maria",DigestUtils.md5Hex("senha2"));
    usuarios.put("alguém",DigestUtils.md5Hex("senha3"));
	return usuarios;
}

public void setUsuarios(Map<String,String> usuarios) {
	Usuarios.usuarios = usuarios;
}

}[/code] E, assim, viveram todos felizes para sempre…

Valeu galera