Generador htpasswd: bcrypt, apr1, SHA-1 y crypt

Convierte un usuario y una contraseña en una línea usuario:hash para un archivo .htpasswd de Apache. Todos los formatos —texto plano, crypt, apr1, SHA-1 y bcrypt— se calculan en tu navegador y se verifican con openssl passwd, htpasswd de Apache y crypt de glibc, así que la contraseña no sale de la pestaña.

Se ejecuta localmente en tu navegador

Cómo crear una entrada htpasswd para la autenticación básica de Apache

Escribe un usuario y una contraseña, elige el formato y pulsa Generar entrada htpasswd. La página devuelve una línea usuario:hash lista para añadir a un archivo .htpasswd y, antes de copiarla, enumera las advertencias del formato elegido.

Todo se calcula en tu navegador. La entrada apr1 coincide con openssl passwd -apr1 y htpasswd -m, la de bcrypt con las líneas $2y$ que Apache escribe con htpasswd -B, y la de SHA-1 con el formato {SHA} de htpasswd -s. La contraseña no se sube y no sale ninguna petición mientras escribes.

  1. Introduce el usuario tal como se escribirá al iniciar sesión. Apache lo limita a 255 bytes y rechaza los dos puntos, porque separan las dos mitades de la línea.
  2. Introduce la contraseña. En Windows htpasswd trunca las contraseñas a 255 caracteres y bcrypt ignora todo lo que pase de 72 bytes; la página avisa cuando se aplica un límite.
  3. Elige el formato. Hoy lo recomendable es bcrypt; MD5 (apr1) es lo que htpasswd escribe por defecto, y crypt, SHA-1 y el texto plano siguen disponibles para servidores antiguos y archivos ya existentes.
  4. Con bcrypt, ajusta el factor de coste. Apache parte de 5 y acepta de 4 a 17; esta página parte de 10 y permite de 4 a 14, porque el cálculo se ejecuta en tu navegador y se duplica en cada paso.
  5. Pulsa Generar entrada htpasswd, lee las notas sobre el resultado y usa Copiar para llevarte la línea. Compruébala en el servidor con htpasswd -vb /etc/apache2/.htpasswd alice antes de confiar en ella.

Qué escribe cada formato htpasswd y cuál conviene elegir

Qué escribe cada formato

plain guarda la contraseña tal cual y httpd solo la acepta en Windows y Netware. crypt es la rutina Unix antigua: 13 caracteres, una sal de 2 caracteres y solo los 8 primeros caracteres de la contraseña; el resto se descarta en silencio, por eso una frase larga pierde fuerza aquí.

MD5 (apr1) escribe $apr1$sal$hash: un esquema propio de Apache que aplica 1000 rondas MD5 a la contraseña y a una sal de 8 caracteres, y es lo que produce htpasswd -m. SHA-1 escribe {SHA} seguido del base64 de un resumen SHA-1; a diferencia de los demás no lleva sal, así que una contraseña da siempre la misma línea. bcrypt escribe $2y$coste$sal$hash, con 16 bytes aleatorios de sal y 2^coste repeticiones del calendario de claves.

Dónde va la entrada

Un archivo .htpasswd contiene una línea usuario:hash por cuenta y Apache lo lee mediante AuthUserFile. Un directorio protegido mínimo usa AuthType Basic, AuthName "Restricted", AuthUserFile /etc/apache2/.htpasswd y Require valid-user. Deja el archivo fuera de la raíz del sitio y que solo lo pueda leer el usuario del servidor web.

Desde la terminal, las mismas líneas salen de htpasswd: -B añade bcrypt (-C fija el coste), -m el formato apr1, -s SHA-1 y -d crypt. Un archivo puede mezclar formatos, así que una fila crypt antigua y otra bcrypt nueva conviven; verifica cualquier línea con htpasswd -vb archivo usuario.

Notas de seguridad

La autenticación básica HTTP envía la contraseña codificada en base64 en cada petición, así que la conexión debe ser HTTPS: el hash protege el archivo, no el cable. crypt, SHA-1 y apr1 se calculan muy rápido, que es justo lo que busca quien roba el archivo; usa bcrypt en las entradas nuevas y sustituye las antiguas cuando toques esas cuentas.

El generador no guarda ni transmite la contraseña: el cálculo ocurre en la página y la sal procede del generador aleatorio del navegador. El coste 10 tarda aquí unas dos décimas de segundo y el 12 alrededor de un segundo, por eso el campo se detiene en 14 aunque htpasswd acepte hasta 17.

Herramientas recientes: