1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java (netbeans) encriptar password --> mysql

Discussão em 'Programação' iniciada por redy, 20 de Fevereiro de 2009. (Respostas: 5; Visualizações: 3667)

  1. 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
     
  2. MadOnion

    MadOnion Folding Member

    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 "[email protected]"
    
    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: 20 de Fevereiro de 2009
  3. stradale

    stradale [email protected] Member

    Vais meter alguma coisa numa cripta?

    Diz-se cifrar.
     
  4. stradale

    stradale [email protected] Member

    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.
     
  5. stradale

    stradale [email protected] Member

    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.
     
  6. mpssantos

    mpssantos Power Member

    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.
     

Partilhar esta Página