Cryptage de mots de passes pour un .htaccess

Mammouth du PHP | 19672 Messages

20 janv. 2006, 22:32

Je ferai des tests en rebootant sous Linux demain, on va bien voir. Enfin merci quand même pour le coup de main :)

Je ne mets pas en résolu, d'abord parce que ça ne l'est pas et ensuite parce que je ne désespère pas de trouver une solution.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 2 Messages

20 avr. 2007, 15:04

:roll:

Hello !

2 ans après, j'ai le même problème pour produire ce genre de script PHP. As-tu finalement trouvé la solution ?

Mammouth du PHP | 19672 Messages

20 avr. 2007, 17:02

Salut,
effectivement, du temps à passé depuis ma dernière intervention sur cette question, et j'ai beau réfléchir, d'abord je ne sais plus trop sur quoi je travaillais pour avoir besoin de ce système de sécurité, et ensuite je ne me souviens pas de l'avoir résolu. il y a fort à parier que j'ai du contourner le problème en utilisant un autre système de sécurité par programmation sans .htaccess ni .htpassword.

Désolé de ne pas pouvoir t'aider davantage :?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 2 Messages

21 avr. 2007, 21:22

:D

Je t'offre la réponse sur un plateau, même si celà ne te sert plus : soyons sport :
<?php 
function generate_salt($len) { 
  $randset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 
  $randset .= './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 
  $salt = ""; 
  for ($i=0;$i<$len;$i++) { 
    $choice = rand(0,strlen($randset)-1); 
    $salt .= (substr($randset,$choice,1)); 
  } 
  return $salt; 
}

function encrypt_password_for_apache($plain,$ptype) { 
/* 
  adapted from: 
  http://www.student.oulu.fi/~samiantt/scripts/authuser.php 
*/ 
  switch ($ptype) { 
    case "SHA": // 
      return '{SHA}' . base64_encode(pack('H*', sha1($plain))); 
      break; 
    case "MD5": 
      $salt = generate_salt(8); 
      $length = strlen($plain); 
      $context = $plain . '$apr1$' . $salt; 
      $binary = pack('H32', md5($plain . $salt . $plain)); 
      for($i = $length; $i > 0; $i -= 16) { 
        $context .= substr($binary, 0, min(16, $i)); 
      } 
      for($i = $length; $i > 0; $i >>= 1) { 
        $context .= ($i & 1) ? chr(0) : $plain{0}; 
      } 
      $binary = pack('H32', md5($context)); 
      for($i = 0; $i < 1000; $i++) { 
        $new = ($i & 1) ? $plain : $binary; 
        if ($i % 3) $new .= $salt; 
        if ($i % 7) $new .= $plain; 
        $new .= ($i & 1) ? $binary : $plain; 
        $binary = pack('H32', md5($new)); 
      } 
      $q = ''; 
      for ($i = 0; $i < 5; $i++) { 
        $k = $i + 6; 
        $j = $i + 12; 
        if ($j == 16) $j = 5; 
        $q = $binary{$i} . $binary{$k} . $binary{$j} . $q; 
      } 
     $q = chr(0) . chr(0) . $binary{11} . $q; 
     $q = strtr(strrev(substr(base64_encode($q), 2)), 
                'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 
                './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); 
     return "\$apr1\$$salt\$$q"; 
     break; 
   default: 
     return crypt($plain, generate_salt(2)); 
     break; 
  } 
}
//Appel de la fonction avec le mot de passe 'bikette71'
$plain2=encrypt_password_for_apache("bikette71","MD5");
echo $plain2;
?>

Mammouth du PHP | 19672 Messages

23 avr. 2007, 09:04

Excellent, merci beaucoup, je testerai ça à l'occasion. :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5924 Messages

23 avr. 2007, 11:11

Sinon tu pouvais utiliser exec('/chemin/htpasswd') pour générer les mots de passe en ligne...
Mais j'ai déjà eu ce problème, c'est bon à savoir qu'il y a une solution simple...