Newsgroup: it.comp.www.php
Titolo: L'utente che scorda la password e MD5

Vorrei offrire un servizio di recupero password al classico problema
dell'utente che ha scordato quale fosse la sua password di accesso.
Pensavo di adoperare il solito metodo del form in cui l'utente smemorato
inserisce la propria email dove verrà recapitata la password che si trova
nel database associata a quella email...  Ma se la password è stata
registrata con l'MD5() non c'è modo di recuperarla? Quale altro sistema si
potrebbe realizzare allora? 
-- 
  Mangiafuoco

 fatto non succede nulla

 ha scritto nel messaggio 
news:co7ucn$ojf$2...@newsreader.mailgate.org...

 mettila che mi fai un favore anche a me 


Non c'è modo di ricavarla dall'md5, altrimenti non avrebbe senso convertirla
se si potesse dedurre.
L'unica è farsi dire una nuova password... e di metodi ce ne sono fin
troppi....

 io faccio cosģ, ho una funzione che funziona benissimo, se vouoi la metto


";
$capo_= "<a href=\"mailto:
sat...@sathia.it
\">Redazione xxx</a>";
function newsletter($uri, $what){
Global $capo, $capo_;
require_once("include/function/is_email.php");
/*
********************************************************************************
SCHEMA TABELLA DA UTILIZZARE
--------------------------------------------------------------------------------
CREATE TABLE `newsletter` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `email` varchar(255) NOT NULL default '',
  `md5` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
________________________________________________________________________________
CHIAMATA DELLA FUNZIONE
--------------------------------------------------------------------------------
<?php newsletter($_SERVER["REQUEST_URI"],NULL);?>
________________________________________________________________________________
FUNZIONE is_valid_email()
--------------------------------------------------------------------------------
function is_valid_email($email) { 
    if(ereg("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)", $email)) { 
        return 1; 
    } else { 
        return 0; 
    } 
} 
________________________________________________________________________________
CSS
--------------------------------------------------------------------------------
.forms {
        border: #666666;
        border-style: solid;
        background: #eeeeee;
        border-top-width:1px;
        border-right-width:1px;
        border-bottom-width: 1px;
        border-left-width: 1px;
        font-family: arial, helvetica, sans-serif;
        font-size: 10px;
        font-style: normal;
        color: #123456; 
}
a {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 10px;
        color: #FF0000;
        text-decoration: underline;
}
.txt {
        font-size: 11px;
        color: #333333;
        font-family: Arial, Helvetica, sans-serif;
}
********************************************************************************
*/
if(strlen($_GET['rimuovi']) == 32){
//Se mi arriva una stringa da 32 caratteri probabilmente c'è una
disiscrizione
//Cerca chi ha quell'hash
$SQL = "SELECT id FROM newsletter WHERE md5 = '".$_GET['rimuovi']."' ";
$query = mysql_query($SQL)or die("Attenzione, errore nell'disiscrizione.
Programma terminato.".mysql_error());
$esiste = mysql_num_rows($query);
if($esiste == 1){
//Se l'md5 corrisponde all'hash di uno degli iscritti
//Cancellalo dal database
$SQL = "DELETE FROM newsletter WHERE md5 = '".$_GET['rimuovi']."' LIMIT 1";
$query = mysql_query($SQL)or die("Attenzione, errore nell'disiscrizione.
Programma terminato.".mysql_error());
$stdout = "Rimozione Dal database completata,<br>Arrivederci dalla
redazione.";
//Eliminazione completata, Programma Chiuso
}
else{
$stdout = "Errore nella procedura di disiscrizione,<br>contattare ".$capo_;
//Errore nel riconoscimento, non c'è utente con quell'hash, Programma Chiuso
}
//Stampa Risultato nella pagina
$html = "       <table width=\"100%\" height=\"100%\" align=\"center\"
border=\"0\" class=\"txt\">
                <tr height=\"24\" valign=\"middle\">
                        <td widht=\"10\"></td>
                        <td>
                        ".$stdout."                     
                        </td></tr>
                </table>
 
";
print($html);
}
else{
if((int)$_POST['cancella_email'] != 0){
//Se ci stiamo disiscrivendo e siamo al primo step
$SQL = "SELECT id FROM newsletter WHERE email LIKE '".$_POST['email']."' AND
id = ".(int)$_POST['cancella_email']." ";
$query = mysql_query($SQL)or die("Attenzione, errore nell'disiscrizione.
Programma terminato.".mysql_error());
$esiste = mysql_num_rows($query);
if($esiste != 0){
//Se la mail passata è uguale all'id
$md5 = md5(microtime());
$SQL = "UPDATE  newsletter SET md5 = '".$md5."' WHERE email LIKE '"
$_POST['email']."' AND id = ".(int)$_POST['cancella_email']." ";
$query = mysql_query($SQL)or die("Attenzione, errore nell'disiscrizione.
Programma terminato.".mysql_error());
$grazie = "Gentile utente, 
Hai attivato la procedura di disiscrizione dalla newsletter, per confermare
clicca su questo indirizzo:
http://".$_SERVER["HTTP_HOST"]."/index.php?rimuovi=".$md5."
Arrivederci dalla Redazione 
xxx.it
";
$avvisa_user = mail($_POST['email'], "Rimozione Dalla Newsletter 
xxx.it
"
$grazie,"From: ".$capo);
$stdout = "Procedura di rimozione attivata<br>Controlla la tua casella di
posta.<br>Arrivederci dalla Redazione 
xxx.it
";
}
else{
$stdout = "Attenzione, la mail non corrisponde ai nostri controlli<br><a
href=\"#\" onclick=\"window.history.back(-1);\">Indietro</a>";
}
$html = "       <table width=\"100%\" height=\"100%\" align=\"center\"
border=\"0\" class=\"txt\">
                <tr height=\"24\" valign=\"middle\">
                        <td widht=\"10\"></td>
                        <td>
                        ".$stdout."                     
                        </td></tr>
                </table>
 
";
print($html);
}
else{
//Ci stiamo Iscrivendo
if(is_valid_email(trim($_POST['email']))){
//se il campo email è stato submittato
$SQL = "SELECT id FROM newsletter WHERE email LIKE '".$_POST['email']."' ";
$query = mysql_query($SQL)or die("Attenzione, errore nell'iscrizione.
Programma terminato.".mysql_error());
$esiste = mysql_num_rows($query);
if($esiste == 0){
//se non abbiamo trovato una mail uguale procediamo.
$SQL = "INSERT INTO newsletter (email) VALUES ('".$_POST['email']."')";
$query = mysql_query($SQL)or die("Attenzione, errore nell'iscrizione.
Programma terminato.".mysql_error());
$id = mysql_insert_id();
$grazie = "Gentile utente, Benvenuto nella Newsletter Di 
xxx.it
.
Da oggi riceverai aggiornamenti, news e inviti di partecipazione ai
forum che...
Aldo , questo è lavoro tuo. compila il ringraziamento.
========================================================================
Per disiscriversi da questa newsletter, andare su:
http://".$_SERVER["HTTP_HOST"]."/index.php?email=".$id."
Una volta compilato il form ti verrà chiesto di dare un'ulteriore
conferma, a questo punto la tua mail verrà eliminata dai nostri database
========================================================================";
$avvisa_user = mail($_POST['email'], "Iscrizione Newsletter 
xxx.it
"
$grazie,"From: ".$capo);
$stdout = "Iscrizione Effettuata con successo!<br>Controlla la tua casella
di posta.<br>Grazie dalla Redazione 
xxx.it
";
$html = "       <table width=\"100%\" height=\"100%\" align=\"center\"
border=\"0\" class=\"txt\">
                <tr height=\"24\" valign=\"middle\">
                        <td widht=\"10\"></td>
                        <td>
                        ".$stdout."                     
                        </td></tr>
        </table>
 
";
print($html);
}
else{
//Se la mail è presente nel database, digli che non va bene!
$stderror = "Attenzione, questa mail è già presente nel nostro database.";
$print = true;
}
}
if(!(is_valid_email(trim($_POST['email'])))){
//Se il form ha inviato una mail non valida
$stderror = "<font color=\"#FF0000\">Attenzione email non valida</font>";
$print = true;
$azione = "invia_email";
}
if(($_POST['email'])==""){
//Riposo, la mail non è ancora stata scritta
$stderror = "Iscriviti alla newsletter";
$print = true;
$azione = "invia_email";
}
if($_GET['email'] != ""){
//Se il campo email è stato submittato
$SQL = "SELECT email FROM newsletter WHERE id = ".(int)$_GET['email'];
$query = mysql_query($SQL)or die("Attenzione, errore nell'iscrizione.
Programma terminato.".mysql_error());
$conta = mysql_num_rows($query);
if($conta != 1){
//se nn abbiamo una mail dall'id passat
$stderror = "Attenzione, non esiste questa email.";
$print = true;
$email = $_POST['email'];
}
else{
//Abbiamo una mail dall'id passat
$record = mysql_fetch_array($query);
$email = $record['email'];
$stderror = "Clicca su invia per disiscriverti";
$azione = "cancella_email";
$print = true;
}
}
if($print == true){
print("
<form name=\"newsletter\" action=\"".$uri."\" method=\"POST\">
        <table width=\"100%\" height=\"100%\" align=\"center\" border=\"0\"
class=\"txt\">
                <tr height=\"24\" valign=\"bottom\">
                        <td widht=\"10\"></td>
                        <td>
                                ".$stderror."
                        </td></tr>
                <tr valign=\"top\">
                        <td widht=\"10\"></td>
                        <td align=\"left\">
                                <input type=\"text\" name=\"email\" maxlenght=\"64\"
style=\"width:120px;\" class=\"forms\" value=\"".$email."\">&nbsp;
                                <input  style=\"width:50px;\"  type=\"submit\" class=\"forms\"
value=\"Invia\">
                                <input type=\"hidden\" name=\"".$azione."\" value=\""
(int)$_GET['email']."\">
                        </td></tr>
                <tr height=\"25\" valign=\"bottom\">
                        <td widht=\"10\"></td>
                        <td>
                                <a href=\"#\">Disclaimer Privacy e Aiuto</a>
                        </td></tr>
        </table>
</form>
");
}
}
}
}
?>

 ha indicizzato md5 e ti da la password
Non bastano.
MD5 critta (o meglio hasha) a 128 bit, quindi hai
340.282.366.920.938.463.463.374.607.431.768.211.456 di password possibili
In un file da 1 Gb ci stanno 67.108.864 di soli hash md5, senza il
corrispondente testuale.
Numero piu` numero meno... :)
Bye.