Hash avec salt

Eléphant du PHP | 80 Messages

07 juin 2011, 12:53

Coucou,

Je suis en train de sécuriser ma partie connexion, et j'ai entendu parler des salt pour hash. Je n'avais jamais fait avant. :oops:

Donc dans ma bdd, au champs MotDePasse j'ai mis go5pro$1mvkhj6*cz4a8ùtvb+MONMOTDEPASSE et j'ai passer ce champs en md5
Et donc dans ma partie PHP je fais la requête
	$LaRequete = "Select Login FROM t_utilisateurs WHERE Login = '$Login' AND MotDePasse = md5('go5pro$1mvkhj6*cz4a8ùtvb + $Pwd') ;";
Mais ça ne me connecte pas ...

Où est la boulette ? :oops:
Merci !
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2011, 14:48

Les espaces autour du '+' ;)

Eléphant du PHP | 80 Messages

07 juin 2011, 14:58

#-o
Ce sera déjà une erreur de moins, merci !

Cependant, ça ne marche toujours pas ...
Dans ma bdd, je rentre bien mon salt+motdepasse, et je passe le tout en md5 ?

Et donc en php, je fais ma requête
AND MotDePasse = md5('go5pro$1mvkhj6*cz4a8ùtvb+$Pwd') ;
Ce qui me transcriras le salt+motdepasse en md5, pour comparer avec le total enregistré dans la bdd ?

Aurais-je oublié quelque chose ? :oops:
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphant du PHP | 256 Messages

07 juin 2011, 16:50

Bonjour,

Mais tu veux utiliser littéralement ou le signe plus ou ajouter à ta chaîne l'autre partie ?

Dans le deuxième cas, tu dois concaténer, non ?

Cordialement,

Gaspard

Eléphant du PHP | 80 Messages

07 juin 2011, 17:03

#-o
Euh si j'ai bien compris le principe du hash ... ajouter ma chaine à l'autre partie.
Donc du coup je viens d'essayer
 MotDePasse = md5('go5pro$1mvkhj6*cz4a8ùtvb'+'$Pwd') ;
et
 MotDePasse = md5('go5pro$1mvkhj6*cz4a8ùtvb.$Pwd') ;
et
 MotDePasse = md5('go5pro$1mvkhj6*cz4a8ùtvb'.'$Pwd') ;
Nada. :s

Je viens même de passer la chaine go5pro$1mvkhj6*cz4a8ùtvb en variable, pour faire
md5('$hash'.'$Pwd') 
ou
md5($hash.$Pwd)
ou
md5($hash+$Pwd)
Rien. #-o
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphant du PHP | 256 Messages

07 juin 2011, 17:25

Re...

Moi, si je fais...
<?php
$pwd = '12345';
$hash = 'go5pro$1mvkhj6*cz4a8ùtvb';
$foo = $pwd;
$foo .= $hash;
echo md5($foo); //966359d5de052df869f5ae0e72ec81ae
?>
J'ai l'impression que ça fonctionne, même si ma concaténation n'est pas très élégante diront les puristes. :)

Gaspard

ViPHP
ViPHP | 2291 Messages

07 juin 2011, 18:16

Salut,

@Ez3kiel quelle est la longueur du champ "MotDePasse " de ta TABLE ???
Il doit être de min 32 car 32 est la longueur de la chaine retourner sous forme hexadécimal

Attention aussi que la chaine ne sera pas la même suivant ta manière de faire
exemple
<?php
$salt = 'go5pro$1mvkhj6*cz4a8ùtvb';
$mot_de_passe = 'MONMOTDEPASSE';


$mt = $salt.'+'.$mot_de_passe; //14e530fc2e17c2cf3a2b562583b466e3
$mt = $salt.$mot_de_passe; //1804f9a41434a8f4fb872127e3645a7d
echo md5($mt);
?>
A+
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 80 Messages

08 juin 2011, 09:09

Varchar (100). ^^
Et mon mdp fait 33 caractères.

J'ai essayé comme ceci
	$hash = "s0mKvIe+-984**é";
	$hash .= $Pwd;
	
	echo md5($hash);
	
	$LaRequete = "Select Login FROM t_utilisateurs WHERE Login = '$Login' AND MotDePasse = md5($hash) ;";
Mais il me retourne
086db0f353d080979d71c6790c12e236Erreur SQL !

Select Login FROM t_utilisateurs WHERE Login = 'admin' AND MotDePasse = md5(s0mKvIe+-984**éadmin1) ;

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*éadmin1)' at line 1
Nb: j'ai fais echo md5($hash) pour vérifier, et je me retrouver avec un hash différent de celui de ma table, alors que c'est bien le même salt et le même Mot de passe passés en Md5 dans ma table. :(
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

ViPHP
ViPHP | 2291 Messages

08 juin 2011, 11:46

Et comme ceci :)
<?php
$hash = "s0mKvIe+-984**é";
        $hash .= $Pwd;

        echo md5($hash);

        $LaRequete = "Select Login FROM t_utilisateurs WHERE Login = '".$Login."' AND MotDePasse = '".md5($hash)."'";
?>
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 80 Messages

08 juin 2011, 12:10

Et bien il me fait mon echo $hash : 086db0f353d080979d71c6790c12e23

Mais il reste différent de celui de ma bdd ...
c7272ad6d1e5af1ee96386f119ad9b4

Et en prime je suis gratifié d'un
Warning: Cannot modify header information - headers already sent by (output started at /homez.228/armorgen/www/administration/admin_exec.php:28) in /homez.228/armorgen/www/administration/admin_exec.php on line 44
#-o
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

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

08 juin 2011, 13:53

yop,

montre nous
- le code actuel
- un echo du $hash
- et un echo "brut" du select MotDePasse from t_utilisateurs WHERE Login = '".$Login."'
(d'ailleurs il vient d'ou le $login ?)

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

Eléphant du PHP | 80 Messages

08 juin 2011, 14:41

Page de connexion (admin.php) :
	  		<form name="F_connexion" method="post" action="admin_exec.php" enctype="multipart/form-data">
				<table>
					<tr ><td >Votre login  </td><td ><input size=20 type="text" name="Login"></td></tr>
					<tr ><td > Votre mot de passe </td><td ><input size=20 type="password" name="MotDePasse"></td></tr>
					<tr ><td colspan="2" class="TD_ACentrer"><input type="SUBMIT"  size="20" name="B_Envoyer" value="Envoyer">				</tr> 
				</table>
			</form> 
		</div>
	</div>
	
	<?php
		//On teste la variable retour
		if (isset($_GET['retour']))
		{
		//On regarde si elle est égale à 1
			if ($_GET['retour']==1)
			{
?>


	<script langugage="text/Javascript">

	alert('Vous avez rentré un mauvais login ou mot de passe')
	
	</script>
	
			
	<?php
			}
	
	else //Sinon c'est que on a modifié l'url, alors tentative d'intrusion

		{
		
		?>
	<script language="Javascript">
	alert("Tentative d'intrusion repérée")
	</script>
	<?php
		}
			}
	?>
	
Page d'execution (admin_exec.php) :
<?php
	session_start();
	//récupération des données de la page login (admin)
	
	
	$Login=$_POST['Login'];
	$Pwd=$_POST['MotDePasse'];
	
	
	
	 
	//Connexion à la base et séléection de la BDD
	
	
	include("Connect.php");
	
	$cnx=mysql_connect(SERVEUR,NOM,MDP) or die("Erreur de connexion sur serveur MySql :".SERVEUR );
		
	mysql_select_db(BASE, $cnx ) or die("Erreur de connexion à la base de données" .  BASE);
	 
	 
	 
		
	// la requête de vérification de l'existence de l'utilisateur
	$hash = "s0mKvIe+-984**é";
	$hash .= $Pwd;
	
	echo md5($hash);
	
	$LaRequete = "Select Login FROM t_utilisateurs WHERE Login = '".$Login."' AND MotDePasse = '".md5($hash)."'";

	
	//exécution de la requête	et fermeture de la connexion
	
 
	$ResultatRequete = mysql_query($LaRequete) or die("Erreur SQL ! <br><br>".$LaRequete."<br><br>".mysql_error());


	//si aucun retour c'est que l'utilisateur ou le mot de passe n'est pas valide ==> retour à la page login
	
	
	if(mysql_num_rows($ResultatRequete) == 0)
	{
	header("location: admin.php?retour=1");
	}
	
	//sinon création des variables sessions et branchement au menu de l'administration
	
	
	else
	{
	
	$_SESSION['NumSession']=session_id();
	$_SESSION['Utilisateur']=$Login;
	header("location: menu_admin.php");
	}
?> 
Echo de $hash :
086db0f353d080979d71c6790c12e236
Echo de $LaRequete :
 Select Login FROM t_utilisateurs WHERE Login = 'admin' AND MotDePasse = '086db0f353d080979d71c6790c12e236'
Et dans la table, valeur de MotDePasse après md5 :
c7272ad6d1e5af1ee96386f119ad9b40
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

ViPHP
ViPHP | 2291 Messages

08 juin 2011, 16:25

Et comment il est arriver en base ? :)
Montre nous ton inscription ou autre
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 80 Messages

09 juin 2011, 08:54

Je l'ai rentré à la main en QBE dans PhpMyAdmin.

Image


Et le résultat :

Image

Il n'y a pas de page d'inscription car il n'y a qu'un utilisateur, admin, pour accéder à l'interface d'administration. :|
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

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

09 juin 2011, 10:53

J'suis p'tet mirro mais dans $hash entre v et e y a un i majuscule (I) et dans pma c'est un i ou un l (avec les différentes police ca se confond :/)

A tu essayé ton code remplacant le hash de la base par celui que tu affiche b? (en virant la fonction md5 bien sur)
D'ailleurs par curiosité a quoi ressemble la requete sql que pma utilise lors de insertion tel que tu l'a fait ?

@+

Ps : juste au cas ou : pma = phpmyadmin ;)
Il en faut peu pour être heureux ......