[RESOLU] Récupération de mot de passe

Eléphant du PHP | 53 Messages

27 nov. 2011, 09:44

Bonjour,

Je souhaite vous proposé mon code pour récupéré sont mot de passe sur mon site :
<?php session_start(); include_once("config.php");?>
<?php include('header.php')?>
   <?php include('menu.php')?>
</div>
<div class="wrap-content">
   <div id="box_758">
          <div class="top"><img src="images/theme/title/contact.png" alt="" /></div>
          <div class="back">
                 <div class="box_top"></div>
                 <div class="box">
                  <h2>Mot de passe oublié</h2>
                 <?php  switch($_GET['etape'])
{
case '1':

                
{
?>      
        <form method="post" action="mdpoublie.php?etape=2">
                <table border=0>
                        <tr>
                                <td>Nom de compte : </td><td><input type="text" name="ndc" /></td>
                        </tr>
                        <tr>
                        </tr>
                </table>
                <input type="submit" value="Continuer" />
        </form>
                
 <?php } ?>
<?php
case '2':
if(isset($_POST['ndc']))
{
        $connect = mysql_connect($serveur, $serveurlogin, $serveurpass) or die(mysql_error());
        mysql_select_db($dbother,$connect) or die(mysql_error());
        $req = mysql_query('SELECT * FROM accounts WHERE account="'.$_POST['ndc'].'"') or die(mysql_error());
        $reponse = mysql_fetch_array($req) or die(mysql_error());
        if(isset($reponse['account']))
        {
                ?> 
                        <center>
                <form method="post" action="mdpoublie.php?etape=3">
                        <table border=0>
                                <tr>
                                        <td>Nom de compte : </td><td><input type="text" name="ndc" value="<?php echo $_POST['ndc']; ?>" /></td>
                                </tr>
                                <tr>
                                        <td>Question secrète : </td><td><input type="text" value="<?php echo $reponse['question']; ?>" /></td>
                                </tr>
                                <tr>
                                        <td>Réponse secrète : </td><td><input type="text" name="reponse" /></td>
                                </tr>
                                <tr>
                                </tr>
                        </table>
                        <input type="submit" value="Continuer" />
                </form>
                </center>                       
                <?php
        }
        else
        {
                echo '
                        <center><font color=red>Erreur : <b>Nom de compte incorrect !</b></font></div></div>';
        }
}
case '3':
if(isset($_POST['ndc'])) {
        $connect = mysql_connect($serveur, $serveurlogin, $serveurpass) or die(mysql_error());
        mysql_select_db($dbother,$connect) or die(mysql_error());
        $req = mysql_query('SELECT * FROM accounts WHERE account="'.$_POST['ndc'].'"') or die(mysql_error());
        $reponse = mysql_fetch_array($req) or die(mysql_error());
if(isset($_POST['reponse']) AND $_POST['reponse'] == $reponse['reponse']) {
        echo 'Votre mot de passe est : "<b>'.$reponse['pass'].'</b>". Merci de le noter quelque part.'; 
} 
}
} 

?>              
                 <?php include('footer.php')?>
Or maintenant je souhaite codé mes mot de passe en MD5 et faire lors de la récupération qui génère un mot de passe aléatoire ?

Cordialement & merci d'avance !

ViPHP
ViPHP | 1996 Messages

27 nov. 2011, 11:23

La stratégie que je conseillerais :

1. Créer un mot de passe aléatoire sur 8 caractères Alphanumériques
2. Envoyer au destinataire
3. Hasher le mot de passe en sha1 car des bases de données md5 existent sur le net
4. Rajouter un p'tit grain de sable dans le mot de passe : inversion de position multiple ou rajout d'une dernière occurrence.
5. Inscrire le mot de passe dans la base de données.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 53 Messages

27 nov. 2011, 13:51

Euh oui mais je n'en n'est aucune idée de comment faire..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 nov. 2011, 14:08

Tu a besoin de :
- La concaténation : http://www.lephpfacile.com/cours/5-conc ... ux-chaines
-la fonction rand
- la fonction mail
- la fonction sha1 ou la fonction la fonction hash qui offre plus de possibilité voir si tu le souhaite mcrypte.

La marche à suivre t'es indiquée par aureusms.
La grain de sable et une chaîne aléatoire (ou non, mais si elle est aléatoire il faut la stocker ;)) que tu ajoute par concaténation au début, à la fin ou les deux du mot de passé avant le hachage via sha1, hash ou autre cela permet d'éviter d'avoir le mot de passé directent en claire si jamais quelqu'un arrive à faire la correspondance avec le hash ;)

Essai quelque chose et si tu n'y arrive pas revient on pourra t'aider ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

28 nov. 2011, 21:39

Bonjour,

Pour la concaténation, j'ai compris. Pour la fonction rand aussi par contre ce que je ne comprend et que je ne saurais pas faire c'est comment transformer le chiffre + lettre ou quoi en code md5 ou sha1 puis le changer dans ma base de donnée ?

Eléphant du PHP | 53 Messages

30 nov. 2011, 20:25

Up :?:

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2011, 20:26

Tu as regardé le lien sur sha1() ? Il y a des exemples tu sais dans la documentation. ^^

ViPHP
ViPHP | 1996 Messages

30 nov. 2011, 23:15

$motDePasse = "a7G4Rp9";
$motDePasseHashe = sha1($motDePasse);
echo $motDePasseHashe;
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 53 Messages

04 déc. 2011, 13:26

Si je veux généré un mot de passe aléatoire Hashé ça donne cela ?
<?php
$motDePasse = rand(5, 15);
$motDePasseHashe = sha1($motDePasse);
echo $motDePasseHashe;
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 déc. 2011, 15:13

C'est bien cela si tu veux que le mot de passe généré soit juste un chiffre compris entre 5 et 15 :) La fonction rand ne te retourne qu'un chiffre au hasard (entre le min et le max précisé), elle ne génère pas des mots de passe.

Il est d'ailleurs préférable d'utiliser mt_rand() à rand().

Et les commentaires postés dans la documentation de la fonction mt_rand() contiennent plusieurs exemples de fonctions permettant de générer des mots de passe ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 53 Messages

04 déc. 2011, 20:44

<?php
session_start();      include_once("config.php");
if (empty($_GET['action']))
{

$pass = $_POST['password'];
$account = $_POST['username'];
$passconf = $_POST['password_conf'];
$email = $_POST['email'];
$capatcha = $_POST['captcha'];
$capatcha2 = $_POST['captcha2'];
$rule = $_POST['rule'];
function random_str($nbr)
{
    $str = "";
    $chaine = "abcdefghijklmnpqrstuvwxy";
    srand((double)microtime()*1000);

    for($i=0; $i<$nbr; $i++) {
        $str .= $chaine[rand()%strlen($chaine)];
    }

    return $str;
}

// Exemple d'un appel avec 12 caractères
$str = random_str(12);

//capatcha
switch ($capatcha2)
{ 
case 1:
$nombre = "B6BB76";
break;
case 2:
$nombre = "jw62k";
break;
case 3:
$nombre = "DODFUS";
break;
case 4:
$nombre = "UDAQX" ;
break;
case 5:
$nombre = "MOZSQ" ;
break;
case 6:
$nombre = "A13QS" ;
break;
case 7:
$nombre = "OP903" ;
break;
case 8:
$nombre = "TYQXP" ;
break;
case 9:
$nombre = "QXUW9" ;
break;
case 10:
$nombre = "B2G9Q" ;
break;
}


//fin capatcha

if ($pass == $passconf)
{
if (strpos($email,'@')== true)
{
if ($_POST['username'] != NULL)
{
if ($nombre == $capatcha)
{
if ($rule == "check")
{
$motpass = sha1($pass)
$db = mysql_connect($serveur, $serveurlogin, $serveurpass);
mysql_select_db($dbother,$db); 
$req = "INSERT INTO accounts (account,pass,email,pseudo) VALUES('$account','$motpass','$email','$str')";
mysql_query($req); 
$_SESSION['account'] = $account;
...

Le problème de ça j'obtiens un erreur au niveau de :
-$db = mysql_connect($serveur, $serveurlogin, $serveurpass);

A la base sans le :
-$motpass = sha1($pass)
Le formulaire remplie ce transfére dans la BDD.

Une solution svp ?

Eléphant du PHP | 53 Messages

05 déc. 2011, 19:49

Up :?:
J'aimerais enfin pouvoir l'avoir pour mercredi.. Dire que je passe a autre chose en dévelopement :)
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 déc. 2011, 22:00

Et qu'est ce qu'on met à la fin d'une instruction pour dire à php qu'elle est terminée ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 53 Messages

05 déc. 2011, 22:03

Ce n'est qu'une partie du script sinon elle est refermé bien sûr mais d'où proviens le problème ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 déc. 2011, 22:09

Hum.. bon alors qu'est ce qu'on met au bout de cette ligne là :
$motpass = sha1($pass)
... pour dire à php que l'instruction est terminée et qu'il peut passer à la suivant sans générer une erreur ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...