Gerador htpasswd: bcrypt, apr1, SHA-1 e crypt

Transforme usuário e senha em uma linha usuário:hash para um arquivo .htpasswd do Apache. Todos os formatos — texto puro, crypt, apr1, SHA-1 e bcrypt — são calculados no navegador e conferidos com o openssl passwd, o htpasswd do Apache e o crypt da glibc; a senha não sai da aba.

Funciona localmente no seu navegador

Como criar uma entrada htpasswd para a autenticação básica do Apache

Digite um usuário e uma senha, escolha o formato e clique em Gerar entrada htpasswd. A página devolve uma linha usuário:hash pronta para acrescentar a um arquivo .htpasswd e, antes de você copiá-la, lista os avisos do formato escolhido.

Tudo é calculado no navegador. A entrada apr1 confere com openssl passwd -apr1 e htpasswd -m, a de bcrypt com as linhas $2y$ que o Apache grava com htpasswd -B, e a de SHA-1 com o formato {SHA} do htpasswd -s. A senha não é enviada e nenhuma requisição sai da aba enquanto você digita.

  1. Informe o usuário exatamente como ele será digitado no login. O Apache limita a 255 bytes e recusa os dois-pontos, que separam as duas metades da linha.
  2. Informe a senha. No Windows o htpasswd trunca senhas em 255 caracteres e o bcrypt ignora tudo depois dos primeiros 72 bytes; a página avisa quando algum limite se aplica.
  3. Escolha o formato. Hoje o recomendado é bcrypt; MD5 (apr1) é o que o htpasswd grava por padrão, e crypt, SHA-1 e texto puro continuam disponíveis para servidores antigos e arquivos existentes.
  4. No bcrypt, ajuste o fator de custo. O Apache começa em 5 e aceita de 4 a 17; esta página começa em 10 e permite de 4 a 14, porque o cálculo roda no navegador e dobra a cada passo.
  5. Clique em Gerar entrada htpasswd, leia as notas acima do resultado e use Copiar para levar a linha. Confira no servidor com htpasswd -vb /etc/apache2/.htpasswd alice antes de confiar nela.

O que cada formato htpasswd grava e qual escolher

O que cada formato grava

plain guarda a senha como digitada e o httpd só aceita isso no Windows e no Netware. crypt é a rotina Unix antiga: 13 caracteres, sal de 2 caracteres e apenas os 8 primeiros caracteres da senha; o restante é descartado em silêncio, por isso uma frase longa perde força aqui.

MD5 (apr1) grava $apr1$sal$hash: um esquema próprio do Apache que aplica 1000 rodadas de MD5 à senha e a um sal de 8 caracteres, e é o que o htpasswd -m produz. SHA-1 grava {SHA} seguido do base64 de um resumo SHA-1; ao contrário dos outros não tem sal, então uma senha gera sempre a mesma linha. bcrypt grava $2y$custo$sal$hash, com 16 bytes aleatórios de sal e 2^custo repetições do calendário de chaves.

Onde a entrada entra

Um arquivo .htpasswd tem uma linha usuário:hash por conta e é lido pelo Apache via AuthUserFile. Um diretório protegido mínimo usa AuthType Basic, AuthName "Restricted", AuthUserFile /etc/apache2/.htpasswd e Require valid-user. Mantenha o arquivo fora da raiz do site e legível apenas pelo usuário do servidor web.

No terminal, as mesmas linhas saem do htpasswd: -B gera bcrypt (-C define o custo), -m o formato apr1, -s SHA-1 e -d crypt. Um arquivo pode misturar formatos, então uma linha crypt antiga convive com uma bcrypt nova; verifique qualquer linha com htpasswd -vb arquivo usuário.

Notas de segurança

A autenticação básica HTTP envia a senha em base64 em cada requisição, então a conexão precisa ser HTTPS: o hash protege o arquivo, não o transporte. crypt, SHA-1 e apr1 são rápidos de calcular, que é exatamente o que interessa a quem rouba o arquivo; use bcrypt nas entradas novas e substitua as antigas conforme mexer nas contas.

O gerador não guarda nem transmite a senha: o cálculo acontece na página e o sal vem do gerador aleatório do navegador. O custo 10 leva cerca de meio décimo de segundo aqui e o 12 cerca de um segundo, por isso o campo para em 14, embora o htpasswd aceite até 17.

Ferramentas recentes: