Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [java] Digest delle password

    Salve ragazzi, devo memorizzare in un database gli username e le password di accesso degli utenti registrati.
    Per una maggior sicurezza vorrei memorizzare le password non in chiaro, ma il loro hash.
    Come posso fare a creare un hash di una password in java??
    (Avete anche qualche consiglio su come aumentare la sicurezza??

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    md5? se n'è parlato diverse volte qui sul forum, compreso un mio post con una banale implementazione dell'algoritmo.

    Saluti,
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    E questo era il codice il suo codice se non sbaglio
    codice:
    public static String hex(byte[] array) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).toUpperCase().substring(1,3));
        }
        return sb.toString();
      }
    
      public static String md5 (String message) {
        try {
          MessageDigest md = MessageDigest.getInstance("MD5");
          return hex (md.digest(message.getBytes("CP1252")));
        }
        catch (NoSuchAlgorithmException e) {}
        catch (UnsupportedEncodingException e) {}
        return null;
      }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4

    [java] MessageDigest

    salve ragazzi ho provato a calcolare il digest di una password con queste istruzioni:

    MessageDigest md = MessageDigest.getInstance("MD5");
    md.updata (pasword.getByte());
    byte [] newPassord = md.digest();

    Inserisco nel database il digest della password, quindi newPassword;
    quando provo a cercarlo nel database rifaccio prima le stesse istruzioni per calcolare il digest della password inserita e poi effettuo la ricerca, ma ho notato che il calcolo del digest della password è diverso dal digest calcolato quando l'ho inserita nel database.
    In altre parole calcolo con le istruzioni sopra presentate il digest di una stessa password e mi da come risultato digest diversi!!!

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Ho unito le discussioni in quanto si sta parlando sempre dello stesso argomento.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    come fai il confronto? le due stringhe sono tutte e due lower/uppercase?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    La ricerca nel database la faccio con la semplice query

    SELECT * FROM table WHERE password=result;

    cmq ho provato a far stampare due volte il digest di una stessa password e mi da risultati diversi; nn capisco il perchè?

    (Nn ho capito la sua domanda:le due stringhe sono tutte e due lower/uppercase? )

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ma come fai ad avere due md5 diversi della stessa stringa? Ho avviene un qualche tipo di trasformazione all'atto dell'inserimento a database (per quello ti ho suggerito di controllare se la versione in db fosse con il case identico alla versione del digest).

    Posta del codice...

    La classe "completa" per l'md5 cho ho è:
    codice:
    import java.security.*;
    import java.io.*;
    
    
    public class encr {
      
      public static String hex(byte[] array) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).toUpperCase().substring(1,3));
        }
        return sb.toString();
      }
    
      public static String md5 (String message) {
        try {
          MessageDigest md = MessageDigest.getInstance("MD5");
          return hex (md.digest(message.getBytes("CP1252")));
        }
        catch (NoSuchAlgorithmException e) {}
        catch (UnsupportedEncodingException e) {}
        return null;
      }
    
      public encr() {
      }
    }
    Comunque, una query del genere col connector si fa con i PreparedStatement:

    codice:
    String query = "SELECT * FROM pdt_user WHERE nome=? AND password = ?";
    PreparedStatement pstm = conn.prepareStatement(query);
    /*
    * toLowerCase perché l'applicazione da me è interfacciata anche via
    * PHP, che genera md5 in lowercase */
    String pwd = encr.md5("password_in_chiaro").toLowerCase();
    pstm.setString(1, "nome_utente");
    pstm.setString(2, pwd);
    pstm.execute();
    rs = pstm.getResultSet();
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Cmq le password di cui sto calcolando il digest hanno sia caratteri maiuscoli che minuscoli...

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non ha importanza: md5 usa i caratteri dell' esadecimale per l'output e in input prende qualunque tipo di carattere.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.