- Home
- Categorie
- Coding e Sistemistica
- Coding
- Criptare password con MD5 (con conferma password)
- 
							
							
							
							
							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..
 
- 
							
							
							
							
							
Appena prima di inserirla nel database... $password=md5($password); 
 
- 
							
							
							
							
							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".  
 Qualcuno sa darmi qualche dritta?
 grazie mille
 
- 
							
							
							
							
							
strsql="INSERT INTO table_name (password) VALUES(MD5('$password')) "; 
 controlla bene la posizione degli apici di md5, vado a memoria.... 
 
- 
							
							
							
							
							
@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! 
 
- 
							
							
							
							
							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
 
- 
							
							
							
							
							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 
 
- 
							
							
							
							
							
@danzur1981 said: Adesso però ho un problema che non riesco a risolvere: 
 nella pagina di login dove devo mettere il codice MD5? 
 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? 
 
- 
							
							
							
							
							
dal form arriva la password in chiaro: Es. prova Sul DB hai qualcosa tipo 92j2h2h92h2g292j22j2j (in md5) Devi confrontare i due dati, come fai? 
 
- 
							
							
							
							
							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!!!  
 Grazie a tutti cmq. Meglio dare consigli come avete fatto che dare la soluzione direttamente.
 Al prossimo problema 
 
- 
							
							
							
							
							
@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! 
 Tieni presente che se per caso decidi di utilizzare sha1() anzichè md5(), devi impostare 40 caratteri... Ciao. 
 
- 
							
							
							
							
							
Per sicurezza, io metterei un varchar(100) così se il contenuto è di 32, si setta in automatico a 32!