Java (netbeans) encriptar password --> mysql

redy

Membro
Bem, talvez o titulo nao seja muito explicito, nao sabia muito bem como me expressar.

O pretendido é: (nao sei se é possível)

Bem, tenho um programa que estou a fazer, e queria adicionar a potencialidade de para entrar nesse ser necessário adicionar uma pass. do genero, ter umas caixinha de dialogo em q o utilizador mete la a pass e o user para entrar, mas a questao é:

Esses dados sao guardados numa base de dados certo?

Ao ficar na BD nao deixam de ficar um pouco desprotegidos? pois basta ter o mysql instalado e com uma consulta ja sabemos a pass, nao existe maneira de encriptar a pass? ou tenho que criar um metodo para encriptar a pass no proprio java e dpois fazer o desencriptador? :X nao tem muita logica axo eu!
Nao existe metodos para fazer esse tipo de tarefas?

Abraço, redy
 
O java dispoe de uma API completissima de Segurança, dá uma olhada na classe MAC
Ao leres a password, por exemplo de uma Applet/Swing ou linha de comandos, guardas a string correspondente ao array de bytes(password) encriptado.
Encriptas a password, usando por exemplo o MD5, e guardas essa hash na base de dados.
Para fazer a encriptação, tens que criar uma chave com base em alguma coisa, por exemplo defines uma password de administrador ou algo do genero.
Quando algum utilizador se autenticar, basta encriptar a password e fazer o compare, por exemplo:

Código:
// Aqui cria-se uma instancia de MAC
Mac mac = Mac.getInstance("HmacMD5");

// Assumindo que a pass de administrador é xpto, vamos criar uma chave secreta
PBEKeySpec keySpec = new PBEKeySpec("xpto".toCharArray( ));
SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = kf.generateSecret(keySpec);

// Iniciar o mac com a chave secreta
mac.init(key);

// Ler a chave através da linha de comandos e encriptar
Scanner scan = new Scanner(System.in);
String password = scan.next();

// Finalizar o mac e guardar numa string a password encriptada
mac.update(password.getBytes());
String encrypPass = Base64Encoder.encode(mac.doFinal());

// Guardar a encryPass na base de dados
// O resultado dessa encryPass sera algo do genero "5asbr54ac@s783xs"

E tens uma password baseada em MD5 encriptada, e guardas na base de dados.
Como já expliquei acima, no processo de autenticação é feito o mesmo processo, quando tiveres a password introduzida encriptada é so fazer:
Código:
// Assumindo que a variavel pass foi introduzida pelo utilizador para autenticacao, 
// e a variavel passBD é aquela que esta guardada na base de dados
if (pass.equals(passBD))
   System.out.println("Login efectuado com sucesso");

Provavelmente estou a dar-te uma solução que mata uma mosca com um canhão, mas aprende-se muito a ler a API de Segurança do Java, e como este exemplo, há milhões deles.
 
Última edição:
Falta acrescentar ao que o MadOnion disse que o algoritmo md5 funciona apenas num sentido. Podes calcular o hash de uma palavra (neste caso, a password) mas não podes fazer o processo inverso, isto é, calcular a palavra original com base no hash md5.

De qualquer forma, pelo que li, é mesmo isto que pretendes.
 
Ao ficar na BD nao deixam de ficar um pouco desprotegidos? pois basta ter o mysql instalado e com uma consulta ja sabemos a pass, nao existe maneira de encriptar a pass? ou tenho que criar um metodo para encriptar a pass no proprio java e dpois fazer o desencriptador? :X nao tem muita logica axo eu!
Não te serve de nada teres um cliente de SQL se não souberes o login da BD.

De qualquer forma, o mais comum é nunca guardar as passwords em plain text mas sim o seu hash md5.
 
MD5

Aqui tens uma maneira mt simples de encriptar uma password:

public static byte[] encriptPassword(byte[] value) {
MessageDigest m = null;
try {
m = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
System.err.println(e.getMessage());
return null;
}

return m.digest(value);
}

Como já foi dito, o Algoritmo MD5 é não tem função inversa, ou seja, não é possível obter a password apartir dos bytes encriptados. Por isso para verificares se uma password esta correcta, é aplicares a função MD5 a uma dáda password e com os bytes da password encriptada comparares cada byte com a password encriptada já guardada.
 
Back
Topo