Lire mdp Whirlpool xAuth !

Fermé
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014 - Modifié par alexx54 le 30/12/2012 à 18:18
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014 - 2 févr. 2013 à 14:42
Bonjour,

Je vous demande votre aide pour lire un mot de passe codé en Whirlpool.
Pour mon serveur minecraft, j'utilise xAuth qui enregistre les mots de passes des joueurs en Whirlpool -->https://github.com/CypherX/xAuth/wiki/Password-Hashing

Mon problème est que je ne trouve pas comment faire dire au code php que le mot de passe est encodé en Whirlpool.

Ce code est prévu pour se connecter (connexion.php)

Actuellement j'ai ce code qui fonctionne mais que avec le codage md5, je souhaiterai donc qu'il lise le code en whirlpool (au sujet du playername, aucun problème) :

Code php qui va chercher et verifier les pseudo/mdp

<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {

if ((isset($_POST['playername']) && !empty($_POST['playername'])) && (isset($_POST['password']) && !empty($_POST['password']))) {

$base = mysql_connect ('localhost', 'util', 'password');
mysql_select_db ('minecraft_server', $base);

// on teste si une entrée de la base contient ce couple pseudo / password

$sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'" AND password="'.mysql_escape_string (md5($_POST['password'])).'"';

$req = mysql_query($sql) or die('Erreur SQL!<br/>'.$sql.'<br/>'.mysql_error());

$data = mysql_fetch_array($req);
mysql_free_result($req);
mysql_close();

// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['playername'] = $_POST['playername'];
header('Location: membre.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son playername, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = '<font color="red">Compte non reconnu.</font>';
}
// sinon, gros problème !!
else {
$erreur = '<font color="red">Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.</font>';
}
}
else {
$erreur = '<font color="red">Veuillez renseigner votre pseudo/mdp.</font>';
}
}
?></code>


Si vous avez besoin de détails... Merci!
Structure BDD : minecraft_server --> accounts

A voir également:

9 réponses

alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
Modifié par alexx54 le 30/12/2012 à 23:12
C'est assez clair ?
0
<?php
echo hash('whirlpool', 'ton texte clair');
?>

c'est que tu cherchais ?
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 déc. 2012 à 12:23
Bonjour, tout d'abord merci d'avoir répondu :) .
Donc ton code php, je doit l'inserer en haut de page (en fait le definir) et recuperer la variable ? a quoi corresponderait 'ton texte clair' dans mon code?
0
--'


http://fr.wikipedia.org/wiki/Fonction_de_hachage
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 déc. 2012 à 14:33
Ah d'accord merci!
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 déc. 2012 à 14:44
$sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'" AND password="'hash('whirlpool', ($_POST['password']'); ?
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 déc. 2012 à 21:23
non?
0
c'est ça (dans le principe) =)

après est-ce que c'est bien ce que tu veux, je sais pas, là ce code va compter le nombre d'occurence de l'utilisateur choisi (en filtrant sur nom d'utilisateur et le hash en même temps)

est-ce qu'un simple "SELECT playername FROM accounts WHERE playername = ' ".$_POST['playername']')."';" n'aurait pas suffit d'ailleurs ?

si la base est bien faite il ne devrait pas y avoir de redondance au niveau des noms
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 déc. 2012 à 22:13
d'accord,merci, je vais tester sa! :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
Modifié par alexx54 le 31/12/2012 à 22:40
j'ai testé : $sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'"';

sa fonctionne en tapant les compte de la base et ceux inexistant sont reconnus comme inexistant, jusque là aucun problème.

Le problème c'est qu'on peut se connecter sur les compte même en tapant n'importe quoi en mot de passe.Par contre quand on ne renseigne pas le mdp, cela marque qu'il faut entrer le mdp,normal^^ d'ou viens le problème?
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
1 janv. 2013 à 01:09
Enfin, cela ne pourrais pas fonctionner car on ne demande pas de mot de passe mais juste le pseudo =) , donc comment lire le mdp avec? je n'y arrive pas avec le hash pour vérifier..
0
ah oui c'est vrai tu dois comparer les infos entrés... bha reprend le code d'origine, et prend la fonction hash() avec whirlpool.
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
1 janv. 2013 à 11:59
ok, merci!
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
1 janv. 2013 à 21:51
Je n'y arrive pas :( , j'obtient une page blanche en utilisant $sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'" AND password="'hash('whirlpool', ($_POST['password']');

Pouvez vous juste me faire le bout de code pour lire le hash du mdp Whirlpool, je cherche depuis longtemps!

Merci!
0
test le code sql dans phpmyadmin
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
1 janv. 2013 à 22:48
Peut etre utiliser function checkPassword($checkPass, $realPass, $algorithm) {
switch ($algorithm) {
case 1:
return $realPass == hash('whirlpool', $checkPass);
case 2:
return $realPass == hash('md5', $checkPass);
case 3:
return $realPass == hash('sha1', $checkPass);
case 4:
return $realPass == hash('sha256', $checkPass);
default:
// xAuth hashing
$saltPos = (strlen($checkPass) >= strlen($realPass) ? strlen($realPass) : strlen($checkPass));
$salt = substr($realPass, $saltPos, 12);
$hash = hash('whirlpool', $salt . $checkPass);
return $realPass == substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos);
}

}

et reprendre $checkPass pour le mettre dans SELECT COUNT (*) ... non?
0
tu voudrais que son code test chaque algorithme ? o_O pk ?
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
1 janv. 2013 à 23:11
Non, je me suis trompé^^ donc je suis censé mettre quoi pour ce satané mot de passe dans la BDD et pouvoir se connecter? je trouve pas :O
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
31 janv. 2013 à 22:27
Bonjour,

J'ai toujours pas trouvé^^ pouvez vous me dire comment inclure la fonction check de xauth :

function checkPassword($checkPass, $realPass, $algorithm) {
	switch ($algorithm) {
	case 1:
		return $realPass == hash('whirlpool', $checkPass);
	case 2:
		return $realPass == hash('md5', $checkPass);
	case 3:
		return $realPass == hash('sha1', $checkPass);
	case 4:
		return $realPass == hash('sha256', $checkPass);
	default:
		// xAuth hashing
		$saltPos = (strlen($checkPass) >= strlen($realPass) ? strlen($realPass) : strlen($checkPass));
		$salt = substr($realPass, $saltPos, 12);
		$hash = hash('whirlpool', $salt . $checkPass);
		return $realPass == substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos);
	}
}


dans mon code de connexion (actuellement codé pour lire le mdp en md5 alors qu'il me faut le lire en Whirlpool :

<?php

// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['playername']) && !empty($_POST['playername'])) && (isset($_POST['password']) && !empty($_POST['password']))) {


		// on teste si une entrée de la base contient ce couple pseudo / password
		$sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'" AND password="'.mysql_escape_string(md5,($_POST['password'])).'"'; 
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$data = mysql_fetch_array($req);
		
		mysql_free_result($req);
		mysql_close();

		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[0] == 1) {
			session_start();
			$_SESSION['playername'] = $_POST['playername'];
			header('Location: membre.php');
			exit();
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son pseudo, soit dans son mot de passe
		elseif ($data[0] == 0) {
			$erreur = '<font color="red">Compte non reconnu.</font>';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = '<font color="red">Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.</font>';
		}
	}
	else {
		$erreur = '<font color="red">Veuillez renseigner votre pseudo/mdp.</font>';
	}
}
?>


Merci d'avance !
0
alexx54 Messages postés 69 Date d'inscription dimanche 19 février 2012 Statut Membre Dernière intervention 17 avril 2014
2 févr. 2013 à 14:42
UP ?
0