Lire mdp Whirlpool xAuth !

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

9 réponses

  1. <?php
    echo hash('whirlpool', 'ton texte clair');
    ?>

    c'est que tu cherchais ?
    1. 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?
    2. --'

      http://fr.wikipedia.org/wiki/Fonction_de_hachage
    3. Ah d'accord merci!
    4. $sql = 'SELECT count(*) FROM accounts WHERE playername="'.mysql_escape_string($_POST['playername']).'" AND password="'hash('whirlpool', ($_POST['password']'); ?
  2. 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
    1. d'accord,merci, je vais tester sa! :)
  3. 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?
    1. 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..
    2. 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.
    3. ok, merci!
  4. 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!
    1. test le code sql dans phpmyadmin
      1. 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?
      2. tu voudrais que son code test chaque algorithme ? o_O pk ?
      3. 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
    2. 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 !