Ir para o conteúdo principal

Gerador de hash bcrypt

O formato .htpasswd recomendado, em 3 cliques

Quer adicionar uma conta a um arquivo .htpasswd com o algoritmo recomendado, sem instalar o apache2-utils? Digite um nome de usuário e uma senha: a linha no formato $2y$ fica pronta para colar.

O custo é um expoente: cada passo dobra o tempo de cálculo. 10 é o valor do htpasswd -B e 12 um bom equilíbrio hoje em dia.

Principais recursos da ferramenta

Formato $2y$ nativo

O hash bcrypt do htpasswd -B, derivado do Blowfish. Compatível com Apache 2.4, nginx, Traefik e Caddy.

Fator de custo ajustável

De 4 a 15, com cursor. Cada posição dobra o trabalho exigido de um atacante. 10 por padrão, como o htpasswd -B.

Linha pronta para colar

O resultado é exibido como uma linha user:hash completa, copiável direto para o seu arquivo .htpasswd.

Sal novo a cada chamada

O bcrypt incorpora um sal de 128 bits ao hash. Duas contas com a mesma senha geram dois hashes diferentes.

Nada é retido

A senha serve para o cálculo e depois desaparece. Nenhum rastro no banco de dados, nenhum registro com a senha em texto claro.

Por que gerar um hash bcrypt online?

A autenticação HTTP Basic continua sendo a forma mais rápida de fechar uma área de administração, uma pré-produção ou um painel interno. Ela se apoia em um arquivo .htpasswd onde cada linha associa um identificador a uma senha com hash - nunca em texto claro.

Desde o Apache 2.4, o comando htpasswd -B produz bcrypt, e é o formato recomendado pela documentação oficial. O problema: esse comando pressupõe ter instalado o apache2-utils no Debian ou o httpd-tools no RHEL. Em um computador Windows, em uma hospedagem compartilhada ou a partir de uma interface web, ele costuma faltar.

Três situações em que este gerador resolve:

  • Proteger uma pré-produção → Fechar o acesso a um ambiente de teste antes de o Google indexá-lo
  • Adicionar uma conta sem acesso SSH → Criar a linha no navegador e colá-la pelo gerenciador de arquivos da sua hospedagem
  • Modernizar um arquivo existente → Substituir gradualmente as entradas $apr1$ por entradas $2y$

Como usar o gerador em 3 passos

Passo 1: digitar o identificador e a senha

Informe o nome da conta e a senha. O campo fica oculto por padrão; clique no olho para reler o que digitou antes de validar. O botão "Gerar uma senha" sorteia uma sequência aleatória de 16 caracteres se você ainda não tiver uma.

Passo 2: ajustar o fator de custo

O cursor parte de 10, o valor do htpasswd -B. Suba para 12 para um acesso sensível. Cada posição dobra o tempo de cálculo: na geração e em cada verificação feita pelo servidor.

Passo 3: copiar a linha

Dois resultados são exibidos: o hash isolado e a linha .htpasswd completa. Copie esta última, cole no seu arquivo e recarregue a configuração do servidor.


Anatomia de um hash bcrypt

Uma linha .htpasswd se divide em dois campos separados por dois-pontos:

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

O segundo campo se decompõe assim:

ParteExemploFunção
Identificador de algoritmo2yIndica ao servidor que se trata de bcrypt
Fator de custo10Expoente: o cálculo encadeia 2^10 = 1.024 rodadas
Sal + digestN9qo8uLOickgx2ZMRZoMye...53 caracteres: 22 para o sal de 128 bits, 31 para a impressão digital

Ao contrário do APR1-MD5, o sal não ocupa um campo separado: ele fica colado ao digest no último bloco. Ele continua legível em texto claro, o que é normal - seu papel não é ser secreto, mas impedir que uma tabela pré-calculada sirva para recuperar a senha.


Entendendo o fator de custo

O custo é um expoente, não um multiplicador. Um custo de N encadeia 2^N rodadas de derivação de chave:

CustoRodadasTempo indicativoUso
8256~15 msBaixo demais hoje
101.024~60 msPadrão do htpasswd -B, correto
124.096~250 msRecomendado para um acesso sensível
1416.384~1 sLatência perceptível em cada conexão

Duas coisas para ter em mente. Primeiro, esse tempo é pago a cada verificação, portanto a cada requisição HTTP Basic: um custo de 14 em uma página cujo navegador repete a autenticação a cada recurso é sentido na hora. Segundo, o ajuste correto depende do seu hardware: meça em vez de copiar um valor, com o alvo habitual de 100 a 250 ms no servidor que fará a verificação.


Protegendo um diretório com Apache

1. Criar o arquivo

Coloque seu arquivo .htpasswd fora da raiz web, para que ele nunca seja servido por HTTP:

/var/www/secrets/.htpasswd

2. Declarar a proteção

No .htaccess do diretório a proteger, ou no bloco <Directory> do seu VirtualHost:

AuthType Basic
AuthName "Zona restrita"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user

3. Recarregar a configuração

sudo apachectl configtest && sudo systemctl reload apache2

Para o nginx, o mesmo par de arquivos se declara assim:

location /admin/ {
    auth_basic           "Zona restrita";
    auth_basic_user_file /var/www/secrets/.htpasswd;
}

O nginx lê bcrypt desde a versão 1.0.3 em sistemas cuja crypt_r() o suporta, o que cobre todas as distribuições Linux comuns.


bcrypt frente aos outros formatos .htpasswd

FormatoPrefixoCusto de cálculoVeredito
bcrypt$2y$Ajustável, 2^custo rodadasRecomendado para qualquer projeto novo
APR1-MD5$apr1$1.000 iterações de MD5Aceitável, compatibilidade máxima
SHA-1{SHA}1 iteração, sem salA evitar: sem sal, quebrável por tabela
crypt() DESnenhum25 iterações, truncado em 8 caracteresObsoleto, não usar mais

Em resumo: o bcrypt é o único formato .htpasswd cujo custo se ajusta ao hardware da época. Os outros três têm um custo fixo, decidido nos anos 1990 ou 2000, que o avanço das GPUs tornou irrisório. Mantenha o APR1-MD5 apenas se o seu servidor não souber ler $2y$.


Verificando o hash pela linha de comando

O resultado desta ferramenta é um hash bcrypt padrão, verificável com os utilitários do sistema:

# Gerar o equivalente com htpasswd (pacote apache2-utils / httpd-tools)
htpasswd -nbB admin minhaSenha

# Impor um fator de custo de 12
htpasswd -nbB -C 12 admin minhaSenha

As duas sequências não serão idênticas - o sal muda a cada sorteio -, mas ambas validam a mesma senha. Para conferir:

# Repetir a verificação com o sal do hash existente
python3 -c "import bcrypt,sys; print(bcrypt.checkpw(b'minhaSenha', sys.argv[1].encode()))" '$2y$10$...'

FAQ - Perguntas frequentes

P: O que é o formato $2y$?

R: É o marcador de bcrypt em um arquivo .htpasswd. O hash completo segue o padrão $2y$<custo>$<sal><digest>: um identificador de algoritmo, um fator de custo de dois dígitos e 53 caracteres com o sal de 128 bits e a impressão digital. É o que o htpasswd -B escreve.


P: Qual a diferença entre $2a$, $2b$ e $2y$?

R: Nenhuma de fundo: são três marcadores do mesmo algoritmo. O $2y$ foi introduzido pelo PHP em 2011 para sinalizar uma implementação corrigida de um bug com caracteres não ASCII, bug ausente da biblioteca usada aqui. Apache e nginx aceitam os três.


P: Qual fator de custo escolher?

R: 10 por padrão, 12 para um acesso sensível. O reflexo certo é medir no servidor que fará a verificação e mirar 100 a 250 ms: lento o bastante para atrapalhar um ataque de dicionário, rápido o bastante para não incomodar no uso diário.


P: Por que não posso passar de 15?

R: Como o custo é um expoente, 16 já exige vários segundos de cálculo e ultrapassaria o tempo concedido a uma requisição HTTP. Para um custo maior, gere o hash localmente com htpasswd -B -C 18.


P: O bcrypt é melhor que o APR1-MD5?

R: Sim, claramente. O APR1-MD5 encadeia 1.000 iterações de MD5, que o hardware especializado calcula aos bilhões por segundo. O bcrypt exige memória e acessos não sequenciais, o que limita fortemente o paralelismo de uma GPU. Para um novo arquivo .htpasswd, bcrypt sem hesitar.


P: Posso usar uma senha com mais de 72 caracteres?

R: Não, e não é um limite desta ferramenta: o bcrypt ignora pura e simplesmente tudo o que ultrapassar 72 bytes. Uma senha de 80 caracteres equivaleria, portanto, aos seus primeiros 72. Atenção: um caractere acentuado conta como dois bytes em UTF-8.


P: A senha é armazenada em algum lugar?

R: Não. Ela trafega em HTTPS até a API da CaptainDNS durante o cálculo e depois é esquecida. Nenhum banco de dados, nenhum registro com a senha em texto claro.


P: Onde o arquivo .htpasswd deve ficar?

R: Fora da raiz web, por exemplo em /var/www/secrets/. Se estiver em um diretório servido por HTTP, um visitante poderia baixá-lo e atacar os hashes offline - que é exatamente o que o fator de custo torna caro, embora não impossível.


Ferramentas complementares

FerramentaUtilidade
Gerador APR1-MD5Produzir uma linha .htpasswd no formato histórico do Apache
Gerador de senhasSortear uma senha forte antes de aplicar o hash
Hash GeneratorCalcular MD5, SHA-1, SHA-256 e SHA-512 de um texto
Codificador Base64Codificar o cabeçalho Authorization de uma requisição Basic
Analisador de cabeçalhos HTTPConferir os cabeçalhos retornados por uma área protegida

Recursos úteis


Compromisso de privacidade

Sua senha é enviada à API da CaptainDNS apenas para calcular o hash, em uma conexão criptografada. Ela não é armazenada nem registrada. Apenas métricas técnicas anônimas são conservadas (tempo de processamento, código de resposta).