Question

Existe-t-il un moyen programmatique de construire mot de passe ht fichiers, sans dépendre des fonctions spécifiques du système d'exploitation (c'est-à-dire exec(), passthru())?

Était-ce utile?

La solution

Les fichiers .httpasswd ne sont que des fichiers texte avec un format spécifique en fonction de la fonction de hachage spécifiée.Si vous utilisez MD5, ils ressemblent à ceci :

foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

C'est le login, un deux-points, $apr1$, le sel et 1000 fois md5 codé en base64.Si vous sélectionnez SHA1, ils ressemblent à ceci :

foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

C'est le login, deux points, la chaîne {SHA} et le hachage SHA1 codé en base64.

Si votre langage a une implémentation de MD5 ou SHA1 et base64, vous pouvez simplement créer le fichier comme ceci :

<?php

$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));

$contents = $login . ':{SHA}' . $hash;

file_put_contents('.htpasswd', $contents);

?>

Voici plus d'informations sur le format :

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

Autres conseils

Traçage est livré avec un remplacement Python pour htpasswd, que vous pourriez, j'en suis sûr, porter dans la langue de votre choix : htpasswd.py.

D'après ce qui est indiqué sur le site Web PHP, vous pouvez utiliser crypt() dans la méthode suivante :

<?php

// Set the password & username
$username = 'user';
$password = 'mypassword';

// Get the hash, letting the salt be automatically generated
$hash = crypt($password);

// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);

?>

Une partie de cet exemple peut être trouvée : http://ca3.php.net/crypt

Bien sûr, cela écrasera l'intégralité du fichier existant, vous souhaiterez donc effectuer une sorte de concaténation.

Je ne suis pas sûr à 100% que cela fonctionnera, mais j'en suis presque sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top