• User

    Criptare password con MD5 (con conferma password)

    Ciao a tutti.
    Avrei un problema sul modo di criptare la password inserita nel form al momento della registrazione al sito.

    Il codice del form registrazione.php è questo:

    <form name="iscrizione utente" action="elabora_registrazione.php" method="post">            
        <table border="0" cellspacing="5" cellpadding="5">
            <tr>
                <td>Nome Utente:</td><td><input name="nomeutente" type="text" size="35" maxlength="40" value=""></td>
            </tr>
            <tr>
                <td>Cognome Utente:</td><td><input name="cognomeutente" type="text" size="35" maxlength="40" value=""></td>
            </tr>
            <tr>
                <td>E-mail:</td><td><input type="text" name="email" size="35" maxlength="40" value=""></td>
            </tr>
            <tr>
                <td>Username</td><td><input type="text" size="35" maxlength="30" name="username" value=""></td>
            </tr>
            <tr>
                <td>Password:</td><td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td>Conferma Password:</td><td><input type="password" name="pwd_conferma"></td>
            </tr>
            <tr><td></td><td><input type=submit value="Invia i Dati"><input type=reset value="Annulla"></td></tr>
        </table>
                </form>
    

    Come vedete c'è la password da mettere e poi la conferma password con i controlli relativi fatti nella pagina elabora_registrazione.php riportata sotto:

    <?php
        $nomeutente = $_POST['nomeutente'];
        $cognomeutente = $_POST['cognomeutente'];
        $email = $_POST['email'];
        $username = $_POST['username'];
        $password = $_POST['password'];
        $pwd_conferma = $_POST['pwd_conferma'];
    
        $db_query = "SELECT * FROM utenti WHERE username = '$username'";
        $res = mysql_query($db_query, $db) or die(mysql_error());
        $num_rows = mysql_num_rows($res);
    
        // Controllo campi obbligatori
        if($email==NULL || $username==NULL || $password==NULL)
        {
            echo "<br><br><br><br><br><p class='login'>Tutti i campi sono obbligatori, <a href='registrazione.php'>Torna Indietro</a></p>";
        }
        // Controllo Password
        else if($password != $pwd_conferma) 
        {
            echo "<br><br><br><br><br><p class='login'>Le password inserite non sono coincidenti, <a href='registrazione.php'>Torna Indietro</a></p>";
        }
        else if(strlen($password) < 4 || strlen($password) > 12)
        {
            echo "<br><br><br><br><br><p class='login'>Password troppo corta, o troppo lunga (Minimo 4 lettere e Massimo 12 lettere), <a href='registrazione.php'>Torna Indietro</a></p>";
        }
            // Registrazione dell'utente nel database
        else
        {
        $query = "INSERT INTO utenti (nomeutente, cognomeutente, email, username, password) VALUES ('$nomeutente','$cognomeutente','$email','$username',$password)";
        mysql_query($query) or die(mysql_error());
        echo"<br><br><br><br><br><p class='login'>Registrazione effettuata. Esegui il login da <a href='index.php'>QUI</a></p>";
        }
    ?>
    

    Volevo chiedervi qualche consiglio su dove mettere il codice MD5 visto che c'è anche il controllo conferma password.
    Grazie a tutti..


  • User Attivo

    Appena prima di inserirla nel database...

    $password=md5($password);


  • User

    ho provato ma il problema è che dopo mi da errore di riscontro tra la password criptata e quella che metto in "conferma password". Se fosse solo da inserire la pass andrebbe bene...il problema che ho è quello del doppio inserimento password in "password" e in "conferma password". :arrabbiato:
    Qualcuno sa darmi qualche dritta?
    grazie mille


  • User Newbie

    strsql="INSERT INTO table_name (password) VALUES(MD5('$password')) ";
    controlla bene la posizione degli apici di md5, vado a memoria....:smile5:


  • User Attivo

    @danzur1981 said:

    ho provato ma il problema è che dopo mi da errore di riscontro tra la password criptata e quella che metto in "conferma password".
    Ho detto: appena prima di inserirla nel database! :wink3:


  • User

    Ok. Problema risolto. Grazie mille ad entrambi.

    INSERT INTO utenti (nomeutente, cognomeutente, email, username, password) VALUES ('$nomeutente','$cognomeutente','$email','$username',MD5('$password'))
    ```.
    Adesso però ho un problema che non riesco a risolvere:
    nella pagina di login dove devo mettere il codice MD5? :?
    Posto la pagina:
    

    $username = $_POST['username'];
    $password = $_POST['password'];

    $result = mysql_query("SELECT * FROM utenti WHERE username='$username'");
    if(mysql_num_rows($result) == 0)
    {
        echo "<br><br><br><br><br><p class='login'><b>$username</b> non esiste come utente registrato</p>";
        echo "<p class='login'>Riprova ad inserire i dati alla pagina di <a href='login.php'>LOGIN</a></p>";
    }    
    else
    {
        $check = mysql_fetch_array($result);
        $user = $check['username'];
        $pass = $check['password'];
        
        if($username == $user && $password == $pass)
        {
            
            $_SESSION['username'] = "$username";
            $_SESSION['password'] = "$password";
                echo "<br><br><br><p class='login'>Login effettuato con successo<br></p>";
                echo "<p class='login'>Benvenuto <b>$username</b><br></p>";
                echo "<p class='login'>Adesso puoi accedere al contenuto della pagina privata dalla <a href='index.php'>homepage</a></p>";
        }
        else {
        echo "<br><br><br><br><p class='login'>Password errata<br></p>";
        echo "<p class='login'>Riprova ad inserire i dati alla pagina di <a href='login.php'>LOGIN</a></p>";
        }
    }
    
    
    Grazie mille dell'aiuto che mi state dando

  • User

    ora che hai inserito la password criptata ti conviene scaricare una classe in php che gestisce il login dell'utente.

    altrimenti diventa troppo complicato e non ne esci fuori facilmente


  • User Attivo

    @danzur1981 said:

    Adesso però ho un problema che non riesco a risolvere:
    nella pagina di login dove devo mettere il codice MD5? :mmm:
    Ragiona!
    Devi averlo bene in testa... analizza bene il problema.

    Adesso hai una tabella 'utenti' in cui sono memorizzati user e password (attenzione: la password non è memorizzata in chiaro bensì criptata).
    Dal form del login arrivano due dati: user e password (in chiaro).
    Non ti resta che 'trovare' nel database l'user e, una volta trovato, confrontare la sua password memorizzata con quella inserita nel login...

    Pensa bene: in che punto va criptata la password proveniente dal login?


  • User Attivo

    dal form arriva la password in chiaro:

    Es. prova

    Sul DB hai qualcosa tipo

    92j2h2h92h2g292j22j2j (in md5)

    Devi confrontare i due dati, come fai?


  • User

    Tutto risolto.
    Avevo già pensato alla soluzione e ci avevo già provato prima ancora di chiedere nel forum:

    $username = $_POST['username'];
        $password = md5($_POST['password']);
    

    ma purtroppo mi sono accorto solo ora che nella tabella utente avevo impostato come attributo del campo password una varchar(30) e l'MD5 cripta la password in una char(32). Mea culpa. Sorry!!! :arrabbiato:
    Grazie a tutti cmq. Meglio dare consigli come avete fatto che dare la soluzione direttamente.
    Al prossimo problema :giggle:


  • User Attivo

    @danzur1981 said:

    Meglio dare consigli come avete fatto che dare la soluzione direttamente.
    Credo che ragionare e capire sia molto meglio che ricevere la pappa pronta!:figo2:
    Tieni presente che se per caso decidi di utilizzare sha1() anzichè md5(), devi impostare 40 caratteri...:wink3:

    Ciao.


  • User Attivo

    Per sicurezza, io metterei un varchar(100) così se il contenuto è di 32, si setta in automatico a 32!