Code pour identification ne fonctionne pas... md5 ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Code pour identification ne fonctionne pas... md5 ?

par SecondSight » 10 août 2007, 17:25

Merci pour votre aide. :)

par Ryle » 10 août 2007, 17:22

Tu utilises effectivement la fonction md5() de php d'après le code de tes insertions :)

Avec md5, quel que soit le mot de passe, celui-ci sera transformé en un nombre de 32 caractères hexadécimaux (de 0 à 9 ou de A à F). Si tu préfères utiliser sha1, le résultat sera une chaine de 20 à 40 caractères.

Bref, il n'y a pas de longueur spécifique, tout dépend de la méthode de chiffrage que tu utilises :)

par SecondSight » 10 août 2007, 17:02

lors de l'ajout de l'utilisateur dans la base de donnée, est-ce que tu as utilisé la fonction md5 de MySQL ou de PHP ?
Et bien, je ne sais pas... :oops: Je pense que j'ai utilisé celle de PHP :
	// Réception des données depuis Flash
	if(isset($_POST['pseudo'])) $pseudo=utf8_decode(($_POST['pseudo']));
		else $pseudo="inconnu";
	if(isset($_POST['mdpasse1'])) $mdpasse1=md5(utf8_decode(($_POST['mdpasse1'])));//md5 crypte le mot de passe
		else $mdpasse1="inconnu";
	if(isset($_POST['email1'])) $email1=utf8_decode(($_POST['email1']));
		else $email1="inconnu";
		
	// la date au format yyyy-mm-dd 
	$date = date ("Y-m-d H:i:s",time());
	
	//Réalisation de la requête
	$query = "INSERT INTO $table (Num, pseudo, mdpasse, email, regdate) VALUES ('','$pseudo', '$mdpasse1', '$email1', '$date')";

	$result = mysql_query($query,$DBConn) or die("Erreur : " . mysql_error());
Et pis en cas de doute, affiche la requête que tu génères.
Je ne sais pas le faire... J'ai essayé avec alert, print et echo (dans les fichiers PHP), mais comme c'est avec du flash ça ne marche pas...

Du coup j'ai simplement intégré une petite fonction mail qui m'envoyait par mail les infos dont j'avais besoin.

J'ai fini par trouver l'origine du problème :
le champ de mot de passe dans la base de données avait une longueur maximale de 30 caractères, alors que le mot de passe crypté en faisait 32.
Quand j'ai regardé de plus près, j'ai vu la différence, j'ai changé la longueur du champ mot de passe à 60 et maintenant ça fonctionne. :)

Quelle doit donc être la longueur d'un champ mot de passe ?

Merci pour votre aide ! :)

par zeus » 10 août 2007, 16:51

lors de l'ajout de l'utilisateur dans la base de donnée, est-ce que tu as utilisé la fonction md5 de MySQL ou de PHP ?

Si c'est celle de MySQL, utilise la même chose pour l'interrogation, à savoir

Code : Tout sélectionner

SELECT * FROM $table WHERE pseudo = '$pseudologin' AND mdpasse = md5('$mdpasselogin')

par SecondSight » 10 août 2007, 16:45

Oui, les mots de passe sont cryptés.

Il me semble que je crypte également ceux entrés par l'utilisateur quand il s'identifie, au début du programme :
 if(isset($_POST['pseudologin'])) $pseudologin=utf8_decode(($_POST['pseudologin']));
	if(isset($_POST['mdpasselogin'])) $mdpasselogin=md5(utf8_decode(($_POST['mdpasselogin'])));
	
	$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin' ";// AND mdpasse = '$mdpasselogin' ";
	$result = mysql_query ($query) or die("Erreur dans Web Des Ecoles: " . mysql_error());
	$num = mysql_num_rows( $result ) ;
Mais ça ne marche pas...

par Ryle » 10 août 2007, 16:43

Tout pareil que Zeus :)

Et pis en cas de doute, affiche la requête que tu génères. Tu verras ce que tu lui demandes de rechercher et tu pourras aller vérifier en base si la valeur existe belle et bien :)

par zeus » 10 août 2007, 16:40

Est-ce que les mots de passes stockés en base de données sont cryptés ?
Si c'est le cas, il faut que tu cryptes également le mot de passe saisi par l'utilisateur. ;)

Si non, pourquoi nous parles tu de md5 ;)

Code pour identification ne fonctionne pas... md5 ?

par SecondSight » 10 août 2007, 16:38

Bonjour !

J'ai écrit un petit programme d'identification avec pseudo et mot de passe, mais à chaque fois que j'entre le mot de passe, le programme dit qu'il est faux... Mais j'ai vérifié dans phpMyAdmin, tout y est, et je n'ai pas fait d'erreur concernant les noms des champs et des variables.

Voici les lignes qui posent problème (à chaque fois que je les commente ou que je les enlève, le code fonctionne, sauf qu'alors on fait comme si il n'y avait pas de mot de passe...) :
$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin'  AND mdpasse = '$mdpasselogin' ";
Si je tape uniquement :
$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin' ";
Le progamme fonctionne.




J'ai donc essayé autrement :
while($row = mysql_fetch_assoc($result)){
	
		if ($row["pseudo"] == $pseudologin AND $row["mdpasse"] == ($mdpasselogin))
			{
			echo 'allow=1' ;
			}
		else
			{
			echo 'allow=0' ;
			}
		}
Mais une fois de plus, il faut que j'enlève :
AND $row["mdpasse"] == ($mdpasselogin)
pour que ça fonctionne...

Au début du programme, j'écris :
if(isset($_POST['pseudologin'])) $pseudologin=utf8_decode(($_POST['pseudologin']));
	if(isset($_POST['mdpasselogin'])) $mdpasselogin=md5(utf8_decode(($_POST['mdpasselogin'])));
Est-ce que le problème vient de md5 ?
Sinon, quelle pourrait être la cause de l'impossibilité d'ajouter le code pour le mot de passe ?

Merci pour votre aide ! :)