bonsoir j'ai un script en php qui me permet de vérifier qu'un mot de passe en clair est égal à son homologue crypté au format "forum phpb3".

L'homologue ne peut pas être décrypté pour le moment, donc la vérification se fait forcement en cryptant le premier et en le comparant au résultat recherché.

Donc j'ai ce code là qui me permet de faire cette vérif.

code.php
[code]<?php
include_once("hash.php");
if (phpbb_check_hash('35468262001', '$H$9dUV9sFpBuJzNBkTHmC.UMXXzOyO6S/'))
print "GOOD";

else
print "BAD";

?>[/code]

et j'ai ce second code qui fait le cryptage et renvoie l'info vrai ou faux
hash.php
[code]<?php

/**

  • Check for correct password
  • @param string $password The password in plain text
  • @param string $hash The stored password hash
  • @return bool Returns true if the password is correct, false if not.
    */
    function phpbb_check_hash($password, $hash)
    {
    $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    if (strlen($hash) == 34)
    {
    return (_hash_crypt_private($password, $hash, $itoa64) === $hash) ? true : false;
    }

    return (md5($password) === $hash) ? true : false;

}

/**

  • Generate salt for hash generation
    */
    function _hash_gensalt_private($input, &$itoa64, $iteration_count_log2 = 6)
    {
    if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31)
    {
    $iteration_count_log2 = 8;
    }

    $output = '$H$';
    $output .= $itoa64[min($iteration_count_log2 + ((PHP_VERSION >= 5) ? 5 : 3), 30)];
    $output .= _hash_encode64($input, 6, $itoa64);

    return $output;
    }

/**

  • Encode hash
    */
    function _hash_encode64($input, $count, &$itoa64)
    {
    $output = '';
    $i = 0;

    do
    {
    $value = ord($input[$i++]);
    $output .= $itoa64[$value & 0x3f];

    if ($i < $count)
    {
    $value |= ord($input[$i]) << 8;
    }

    $output .= $itoa64[($value >> 6) & 0x3f];

    if ($i++ >= $count)
    {
    break;
    }

    if ($i < $count)
    {
    $value |= ord($input[$i]) << 16;
    }

    $output .= $itoa64[($value >> 12) & 0x3f];

    if ($i++ >= $count)
    {
    break;
    }

    $output .= $itoa64[($value >> 18) & 0x3f];
    }
    while ($i < $count);

    return $output;
    }

/**

  • The crypt function/replacement
    /
    function _hash_crypt_private($password, $setting, &$itoa64)
    {
    $output = '
    ';

    // Check for correct hash
    if (substr($setting, 0, 3) != '$H$')
    {
    return $output;
    }

    $count_log2 = strpos($itoa64, $setting[3]);

    if ($count_log2 < 7 || $count_log2 > 30)
    {
    return $output;
    }

    $count = 1 << $count_log2;
    $salt = substr($setting, 4, 8);

    if (strlen($salt) != 8)
    {
    return $output;
    }

    /**

    • We're kind of forced to use MD5 here since it's the only
    • cryptographic primitive available in all versions of PHP
    • currently in use. To implement our own low-level crypto
    • in PHP would result in much worse performance and
    • consequently in lower iteration counts and hashes that are
    • quicker to crack (by non-PHP code).
      /
      if (PHP_VERSION >= 5)
      {
      $hash = md5($salt . $password, true);
      do
      {
      $hash = md5($hash . $password, true);
      }
      while (--$count);
      }
      else
      {
      $hash = pack('H
      ', md5($salt . $password));
      do
      {
      $hash = pack('H*', md5($hash . $password));
      }
      while (--$count);
      }

    $output = substr($setting, 0, 12);
    $output .= _hash_encode64($hash, 16, $itoa64);

    return $output;
    }
    ?>[/code]

le fonctionnment de ces 2 codes est bon je l'ai vérifié

donc je souhaiterai faire la chose suivante: dans un fichier type index.php

désolé la syntaxe va être quelque peu épuré

[code]
<php?
$mot_de_passe_clair='35468262001';
$mot_de_passe_encrypter;

$mot_de_passe_encrypter = encrypt $mot_de_passe_clair

echo $mot_de_passe_encrypter

?>

[/code]

après je pourrais reprendre mes petits, mais je bloque et comme je débute, là je suis largué.

merci d'avance

Flo

Aucune réponse