Pregunta

¿Existe una forma programática de construir? htpasswd archivos, sin depender de funciones específicas del sistema operativo (es decir, exec(), passthru())?

¿Fue útil?

Solución

Los archivos .httpasswd son solo archivos de texto con un formato específico según la función hash especificada.Si está utilizando MD5, se verán así:

foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

Ese es el inicio de sesión, dos puntos, $apr1$, la sal y 1000 veces md5 codificado como base64.Si selecciona SHA1, se verán así:

foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

Ese es el inicio de sesión, dos puntos, la cadena {SHA} y el hash SHA1 codificado con base64.

Si su idioma tiene una implementación de MD5 o SHA1 y base64, puede crear el archivo de esta manera:

<?php

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

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

file_put_contents('.htpasswd', $contents);

?>

Aquí hay más información sobre el formato:

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

Otros consejos

Trac Se envía con un reemplazo de Python para htpasswd, que estoy seguro de que puedes trasladar al idioma que elijas: htpasswd.py.

Por lo que dice en el sitio web de PHP, puedes usar crypt() en el siguiente método:

<?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);

?>

Parte de este ejemplo se puede encontrar: http://ca3.php.net/crypt

Por supuesto, esto sobrescribirá todo el archivo existente, por lo que querrás hacer algún tipo de concatinación.

No estoy 100% seguro de que esto funcione, pero estoy bastante seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top