Hachage md5, aide débutant malgré nombreux essais...

Fermé
Pierre - 4 févr. 2015 à 15:15
 Pierre - 4 févr. 2015 à 18:15
Bonjour à tous,

Alors voila je commence à coder doucement le php et je me suis attardé sur un petit tuto sur internet qui permet de voir la mise en place d'un forum et donc de voir des cas classiques comme :
- inscription/connexion
-publication...

bien que le système comporte des erreurs que j'ai pu surmonter, il présente des choses à améliorer. Notamment le hachage du mot de passe, dans le système actuel il n'y en a pas, je bute un peu la dessus notamment sur où intégrer le md5 et comment le décrypter lors de la connexion.

J'ai tenté de nombreuses fois mais je but vraiment et j'y arrive pas du tout.

Une âme charitable pourrait-elle m'aider ?

Un échange par skype est possible, si ça arrange des personnes.

En vous remerciant beaucoup,

Pierre

Voici mes fichiers :

index.php :
<?php
session_start();

include_once 'function/function.php';
$bdd = bdd();

if (!isset($_SESSION['id'])) 
{
	header('Location:connexion.php');
	exit();
}
else 
{
?>

<!DOCTYPE html>
<head>
	<meta charset='utf-8' />
	<title>Mon super forum</title>
	<meta name="author" content="">
	<link rel="stylesheet" type="text/css" href="css/general.css">
	<link rel="shortcut incon" type="text/css" href="images/favicon.ico">
</head>
<body>
	<?php
		echo $_SESSION['email'];
	?>
	<a href="deconnexion.php">Deconnexion</a>
	<h1><a href="index.php">TITRE !</a></h1>

	<div id="Cforum">
	
	<?php
		if(isset($_GET['categorie']))
		{
			$_GET['categorie'] = htmlspecialchars($_GET['categorie']);
			?>

			<div class="categories">
				<h1><?php echo $_GET['categorie']; ?></h1>
			</div>

			<a href="addPost.php">Ajouter un sujet</a>

			<?php
			}
				else
			{
			$requete = $bdd->query('SELECT * FROM categories');
			while($reponse = $requete->fetch())
			{
			?>
				<div class="categories">
					<a href="index.php?categorie=<?php echo $reponse['name']; ?>"><?php echo $reponse['name']; ?></a>
				</div>
			<?php
			}
		}
	?>
	</div>
</body>
</html>
<?php
}
?>


inscription.php :
<?php
session_start();

include_once 'function/function.php';
include_once 'function/inscription.class.php';
$bdd = bdd();

if (isset($_POST['pseudo']) AND isset($_POST['email']) AND isset($_POST['mdp']) AND isset($_POST['mdp2'])) {
	$inscription = new inscription($_POST['pseudo'],$_POST['email'],$_POST['mdp'],$_POST['mdp2']);
	$verif = $inscription->verif();
	if($verif == "ok")
	{
		if ($inscription->enregistrement())
		{
			if ($inscription->session())
			{
				header('Location: index.php');
			}
		}
		else
		{
			echo 'Une erreur est survenue';
		}
	}
	else
	{
		$erreur = $verif;
	}
}
?>
 
<!DOCTYPE html>
<head>
	<meta charset='utf-8' />
	<title>Mon super forum</title>
	<meta name="author" content="">
	<link rel="stylesheet" type="text/css" href="css/general.css">
	<link rel="shortcut incon" type="text/css" href="images/favicon.ico">
</head>
<body>
	<h1>Inscription</h1>
	<div id="Cforum">
		<form method="post" action="inscription.php">
			<p>
				<input name="pseudo" type="text" placeholder="Pseudo" required /><br>
				<input name="email" type="email" placeholder="Adresse mail" required /><br>
				<input name="mdp" type="password" placeholder="Mot de passe" required /><br>
				<input name="mdp2" type="password" placeholder="Confirmation de votre mot de passe" required /><br>
				<input type="submit" value="S'inscrire" />

				<?php
				if (isset($erreur))
				{
					echo $erreur;
				}
				?>
			</p>
			<p>Si vous avez deja un compte cliquez <a href="connexion.php">ici</a></p>
		</form>
	</div>
</body>
</html>





connexion.php :
<?php
session_start();

include_once 'function/function.php';
include_once 'function/connexion.class.php';
$bdd = bdd();

if(isset($_POST['email']) AND isset($_POST['mdp']))
{
	$connexion = new connexion($_POST['email'],$_POST['mdp']);
	$verif = $connexion->verif();
	if($verif =="ok")
	{
		if($connexion->session())
		{
			header('Location: index.php');
		}
	}
	else 
	{
		$erreur = $verif;
	}

}
?>
 
<!DOCTYPE html>
<head>
	<meta charset='utf-8' />
	<title>Mon super forum</title>
	<meta name="author" content="">
	<link rel="stylesheet" type="text/css" href="css/general.css">
	<link rel="shortcut incon" type="text/css" href="images/favicon.ico">
</head>
<body>
	<h1>Connexion</h1>
	<div id="Cforum">
		<form method="post" action="connexion.php">
			<p>
				<input name="email" type="email" placeholder="Adresse mail" required /><br>
				<input name="mdp" type="password" placeholder="Mot de passe..." required /><br>
				<input type="submit" value="Connexion" />
				<?php
				if(isset($erreur))
				{
					echo $erreur;
				}
				?>
			</p>
			<p>Si vous n'avez aucun compte, inscrivez-vous <a href="inscription.php">ici</a> c'est gratuit'</p>
		</form>
	</div>
</body>
</html>





Mes fonctions :

function.php :
<?php

function bdd()
{
	try
	{
		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
		$bdd = new PDO('mysql:host=localhost;dbname=forum', 'root', '', $pdo_options);
	}
	catch (Exception $e)
	{
		die('Erreur : ' . $e->getMessage());
	}
	return $bdd;
}

?>


inscription.class.php :
 <?php
 
 include_once 'function.php';

 class inscription {
 	private $pseudo;
 	private $email;
 	private $mdp;
 	private $mdp2;
 	private $bdd;

 	public function __construct($pseudo,$email,$mdp,$mdp2)
 	{
 		$pseudo = htmlspecialchars($pseudo);
 		$email = htmlspecialchars($email);

 		$this->pseudo = $pseudo;
 		$this->email = $email;
 		$this->mdp = $mdp;
 		$this->mdp2 = $mdp2;
 		$this->bdd = bdd();
 	}

 	public function verif()
 	{
 		if(strlen($this->pseudo) > 3 AND strlen($this->pseudo) < 20 )
 		{
 			if(filter_var($this->email, FILTER_VALIDATE_EMAIL))
 			{
 				if (strlen($this->mdp) > 5 AND strlen($this->mdp) < 20 )
 				{
 					if ($this->mdp == $this->mdp2)
 					{
 						return 'ok';
 					}
 					else 
 					{
 						$erreur = 'Les mots de passe ne sont pas identiques';
 						return $erreur;
 					}
 				}
 				else
 				{
 					$erreur = 'Le mot de passe doit contenir entre 5 et 20 caractères';
 					return $erreur;
 				}
 			}
 				else
 				{
 					$erreur = 'syntaxe de l\'adresse email incorrect';
 					return $erreur;
 				}
 		}
	 	else
	 	{
	 		$erreur = 'Le pseudo doit contenir entre 3 et 15 caractères';
	 		return $erreur;
	 	}
 	}

 	public function enregistrement()
 	{
 		$requete = $this->bdd->prepare("INSERT INTO membres(pseudo, email, mdp) VALUES (:pseudo,:email,:mdp)");
        $requete->execute(array(
        'pseudo'=> $this->pseudo,
        'email'=> $this->email,
        'mdp'=> $this->mdp        
        ));
        return 1; 
    }

    public function session()
    {
    	$requete = $this->bdd->prepare("SELECT id FROM membres WHERE pseudo = :pseudo");
    	$requete->execute(array(
    	'pseudo'=> $this->pseudo
    	));
    	$requete = $requete->fetch();
    	$_SESSION['id'] = $requete['id'];
    	$_SESSION['pseudo'] = $this->pseudo;

    	return 1;
    }
 }


connexion.class.php :
<?php
include_once 'function.php';

class connexion
{
	private $email;
 	private $mdp;
 	private $bdd;

 	public function __construct($email,$mdp)
 	{
 		$this->email = $email;
 		$this->mdp = $mdp;
 		$this->bdd = bdd();
 	}

 	public function verif()
 	{
 		$requete = $this->bdd->prepare('SELECT * FROM membres WHERE email = :email');
 		$requete->execute(array('email'=> $this->email));
 		$reponse = $requete->fetch();
 		if($reponse)
 		{
 			if($this->mdp == $reponse['mdp'])
 			{
 				return 'ok';
 			}
 			else
 			{
 				$erreur = 'Le mot de passe est incorrect';
 				return $erreur;
 			}
 		}
 		else
 		{
 			$erreur = 'Cet email n\'est lie a aucun compte';
 			return $erreur;
 		}
 	}

 	public function session()
    {
    	$requete = $this->bdd->prepare("SELECT id FROM membres WHERE email = :email");
    	$requete->execute(array(
    	'email'=> $this->email
    	));
    	$requete = $requete->fetch();
    	$_SESSION['id'] = $requete['id'];
    	$_SESSION['email'] = $this->email;

    	return 1;
    }
}
A voir également:

1 réponse

Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 24
Modifié par Yuh12 le 4/02/2015 à 17:02
En fait le md5 tout comme le sha1 ne sont justement pas fait pour être décrypter.

Ce qu'il faut comprendre c'est que tu dois encoder le MDP pour qu'il aille en BDD.
Et ensuite ne plus le toucher.

Donc à l'inscription, avant ton INSERT INTO dans la BDD, tu fais un

$mdp_inscription=md5($POST['mdp_insc']);

La tu obtiens un mot de passe crypté en BDD.

Maintenant à la connexion pour vérifier si il est bon, tu récupères ce que l'utilisateur à entré en l'encodant lui aussi:

$mdp_connec=md5($POST['mdp_connec']);


Et tu vérifie si le mdp encodé de l'utilisateur est bien égal à celui en BDD.


Mais à aucun moment tu ne dois "décrypter" ce code, c'est un peu contraire à l'utilisation de ces cryptages ^^ , les mots de passe sont ainsi protégés aussi de ceux qui gèrent la BDD.
0
Un grand merci à toi !

Oui pour le décrypter je voulais dire le comparer à la BDD !

Je test de suite !

Merci
0