Aide en PHP pour création d'un site

Petit nouveau ! | 6 Messages

05 oct. 2018, 13:54

Bonjour à tous :D ,

Je suis bloqué dans ma création de site en php,
j'ai essayé de créer un formulaire d'inscription, tout ce passe bien sauf que j'aimerai hasher le mot de passe autrement dans la base de donné.
C'est à dire, j'aimerai savoir comment je pourrais hasher le mot de passe pour qu'il apparaisse de cette manière:"378b243e220ca493" dans la base de donnée.

Merci d'avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 oct. 2018, 14:29

Bonjour,

Tu peux utiliser la fonction password_hash() qui sert justement à calculer le hash d'un mot de passe : http://php.net/password_hash
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

05 oct. 2018, 15:23

Merci du conseil,
Mais ce n'est pas ce que je souhaite,
Je souhaiterai hashé mon mot de passe en MySQL 323 ou en Pre-4.1 avec un code en php.

Petit nouveau ! | 6 Messages

05 oct. 2018, 15:29

J'aimerai effectué la requête " SELECT PASSWORD('$mdp') " [sert à crypter le mdp sous cette forme par exemple"378b243e220ca493"]
puis récupérer le résultat pour l'insérer dans la DB et tout cela en utilisant un code en PHP pour mon site web.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 oct. 2018, 16:00

Voici l'implémentation en PHP des fonctions de hashage de mot de passe de MySQL :
/**
 * MySQL "OLD_PASSWORD()" AKA MySQL323 HASH FUNCTION
 * This is the password hashing function used in MySQL prior to version 4.1.1
 * By Rev. Dustin Fineout 10/9/2009 9:12:16 AM
**/
function mysql_old_password_hash($input, $hex = true)
{
  $nr = 1345345333; $add = 7; $nr2 = 0x12345671; $tmp = null;
  $inlen = strlen($input);
  for ($i = 0; $i < $inlen; $i++) {
    $byte = substr($input, $i, 1);
    if ($byte == ' ' || $byte == "\t") continue;
    $tmp = ord($byte);
    $nr ^= ((($nr & 63) + $add) * $tmp) + (($nr << 8) & 0xFFFFFFFF);
    $nr2 += (($nr2 << 8) & 0xFFFFFFFF) ^ $nr;
    $add += $tmp;
  }
  $out_a = $nr & ((1 << 31) - 1);
  $out_b = $nr2 & ((1 << 31) - 1);
  $output = sprintf("%08x%08x", $out_a, $out_b);
  if ($hex) return $output;
  return hex_hash_to_bin($output);
} //END function mysql_old_password_hash

/**
 * MySQL "PASSWORD()" AKA MySQLSHA1 HASH FUNCTION
 * This is the password hashing function used in MySQL since version 4.1.1
 * By Rev. Dustin Fineout 10/9/2009 9:36:20 AM
**/
function mysql_password_hash($input, $hex = true)
{
  $sha1_stage1 = sha1($input, true);
  $output = sha1($sha1_stage1, !$hex);
  return $output;
} //END function mysql_password_hash

/**
 * Computes each hexidecimal pair into the corresponding binary octet.
 * Similar to mysql hex2octet function.
**/
function hex_hash_to_bin($hex)
{
  $bin = "";
  $len = strlen($hex);
  for ($i = 0; $i < $len; $i += 2) {
    $byte_hex = substr($hex, $i, 2);
    $byte_dec = hexdec($byte_hex);
    $byte_char = chr($byte_dec);
    $bin .= $byte_char;
  }
  return $bin;
} //END function hex_hash_to_bin
Source : https://stackoverflow.com/a/1543873
A noter que ce code a été développé pour PHP5.2, donc si tu utilises une version plus récente (ce qui est conseillé ;-) ) il y aura peut être des petites adaptations de codes, à tester.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

06 oct. 2018, 10:14

Merci beaucoup :D

Mais j’ai une question, pourriez-vous vous me donnez un exemple dans le quel apparaît cette fonction comme dans un formulaire d’inscription, je suis un débutant en PHP, désolé.

Merci d’avance.