Ir para o conteúdo principal

Gerador de hash APR1-MD5

Proteja um diretório ou um arquivo Apache em 3 cliques

Precisa adicionar uma conta a um arquivo .htpasswd mas não tem o comando htpasswd à mão? Informe um usuário e a sua própria senha: a linha no formato $apr1$ sai pronta para colar. Ainda não tem senha? Um botão ao lado do campo pode gerar uma, mas é opcional.

Digite o nome da conta a ser criada no arquivo .htpasswd.

Principais recursos da ferramenta

Formato $apr1$ nativo

O MD5 com sal do Apache, com suas 1.000 iterações e sua codificação base64 própria. Compatível com Apache, nginx e Traefik.

Sal aleatório seguro

Um sal de 8 caracteres sorteado por gerador criptográfico a cada chamada. Duas contas com a mesma senha recebem hashes diferentes.

Linha pronta para colar

O resultado aparece como uma linha user:hash completa, que você copia direto para o seu arquivo .htpasswd.

Sal personalizável

Informe o seu próprio sal para reproduzir um hash existente e comparar duas entradas do mesmo arquivo.

Nada é guardado

A senha serve para o cálculo e depois some. Sem rastro no banco de dados, sem senha em texto puro nos logs.

Por que gerar um hash APR1-MD5 online?

A autenticação HTTP Basic ainda é o jeito mais rápido de fechar uma área administrativa, um ambiente de homologação ou um painel interno. Ela se apoia em um arquivo .htpasswd no qual cada linha associa um usuário a uma senha com hash - nunca em texto puro.

O problema: produzir esse hash normalmente exige o comando htpasswd, ou seja, o pacote apache2-utils no Debian ou httpd-tools no RHEL. Em uma estação Windows, em uma hospedagem compartilhada ou a partir de uma interface web, esse comando quase sempre falta.

Três situações em que este gerador tira você do aperto:

  • Proteger uma homologação → Fechar o acesso a um ambiente de testes antes que o Google o indexe
  • Adicionar uma conta sem acesso SSH → Criar a linha no navegador e colar pelo gerenciador de arquivos da hospedagem
  • Migrar uma configuração → Reconstruir um arquivo .htpasswd perdido a partir das credenciais conhecidas

Como usar o gerador em 3 passos

Passo 1: informar o usuário e a senha

Digite o nome da conta e a senha dela. O campo fica oculto por padrão; clique no ícone de olho para reler o que você escreveu antes de enviar.

Passo 2: deixar o sal ser gerado

Na quase totalidade dos casos, deixe o campo do sal em branco: um sal aleatório de 8 caracteres será sorteado no servidor. Só preencha para reproduzir um hash existente de forma idêntica.

Passo 3: copiar a linha

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


Anatomia de uma linha .htpasswd

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

admin:$apr1$Xq7nD2mR$5CqLZ.k1qLkOvVQ0uZ9Yl.

O segundo campo, por sua vez, se decompõe em três partes delimitadas por $:

ParteExemploFunção
Identificador do algoritmoapr1Diz ao servidor que se trata do MD5 com sal do Apache
SalXq7nD2mR8 caracteres aleatórios, gravados em texto puro no arquivo
Digest5CqLZ.k1qLkOvVQ0uZ9Yl.22 caracteres, resultado das 1.000 iterações

O sal não é um segredo: ele fica legível no arquivo. O papel dele é impedir que uma tabela pré-calculada (rainbow table) sirva para recuperar a senha e garantir que duas contas com a mesma senha não tenham o mesmo digest.


O que o algoritmo $apr1$ faz de verdade

O APR1-MD5 não é um simples md5(senha + sal). Ele encadeia:

  1. Dois digests iniciais - um sobre senha + $apr1$ + sal, outro sobre senha + sal + senha
  2. Uma mistura dependente do comprimento - pedaços do segundo digest são reinjetados no primeiro, byte a byte
  3. 1.000 iterações - a cada rodada, senha, sal e digest anterior são recombinados segundo um padrão que depende do número da rodada
  4. Uma codificação base64 do crypt - os 16 bytes finais são relidos em uma ordem entrelaçada e codificados no alfabeto ./0-9A-Za-z

São essas 1.000 iterações que fazem a diferença em relação a um MD5 puro: elas multiplicam por mil o custo de cada tentativa, freando na mesma medida um ataque de dicionário.


Protegendo um diretório com o Apache

1. Criar o arquivo

Coloque o 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 "Area restrita"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user

3. Recarregar a configuração

sudo apachectl configtest && sudo systemctl reload apache2

No nginx, o mesmo par de arquivos é declarado assim:

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

APR1-MD5 diante dos outros formatos .htpasswd

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

Resumindo: se o seu servidor aceita bcrypt (htpasswd -B), use bcrypt. O APR1-MD5 é a melhor opção restante quando o bcrypt não está disponível - e vale infinitamente mais do que um {SHA} sem sal.


Conferindo o hash na linha de comando

Com o mesmo sal, o resultado desta ferramenta é idêntico ao dos utilitários do sistema:

# Com htpasswd (pacote apache2-utils / httpd-tools)
htpasswd -nbm admin minhaSenha

# Com OpenSSL, impondo o sal
openssl passwd -apr1 -salt Xq7nD2mR minhaSenha

O segundo exemplo também serve para conferir esta ferramenta: informe o mesmo sal no formulário e você deve obter exatamente a mesma string.

Para verificar se uma senha corresponde a uma linha existente, releia o sal contido no hash armazenado e refaça o cálculo com esse sal.


FAQ - Perguntas frequentes

P: O que é o formato $apr1$?

R: É o formato de hash histórico do Apache, também chamado de APR1-MD5. Ele aplica 1.000 iterações de MD5 sobre a senha e um sal de 8 caracteres e codifica o resultado no alfabeto base64 do crypt. O prefixo $apr1$ funciona como identificador do algoritmo.


P: O APR1-MD5 ainda é seguro?

R: É bem mais sólido do que um MD5 puro, mas continua rápido de calcular para um atacante com GPUs. Em um projeto novo, prefira bcrypt via htpasswd -B. O APR1-MD5 mantém seu valor quando a compatibilidade vem primeiro: versões antigas do Apache, nginx sem suporte a bcrypt, appliances de rede.


P: Esse hash funciona com o nginx?

R: Sim. O módulo ngx_http_auth_basic_module do nginx lê o formato Apache, $apr1$ incluído. A linha gerada é usada como está com auth_basic_user_file.


P: Por que recebo um hash diferente a cada vez?

R: Um novo sal aleatório é sorteado a cada geração. Os dois hashes são válidos para a mesma senha: na verificação, o servidor relê o sal gravado dentro do hash e refaz o cálculo. Preencha o campo do sal se quiser um resultado reproduzível.


P: A senha fica armazenada em algum lugar?

R: Não. Ela trafega por HTTPS até a API CaptainDNS durante o cálculo e depois é descartada. Nem banco de dados, nem log com a senha em texto puro.


P: Posso usar acentos ou símbolos?

R: Sim, o cálculo trabalha sobre os bytes UTF-8 da senha. Uma ressalva: um cliente HTTP antigo pode codificar os caracteres não ASCII de outra forma, o que faria a autenticação falhar. Na dúvida, fique no ASCII.


P: Onde colocar o arquivo .htpasswd?

R: Fora da raiz web, por exemplo em /var/www/secrets/. Se ele estiver em um diretório servido por HTTP, um visitante poderia baixá-lo e atacar os hashes offline.


Ferramentas complementares

FerramentaUtilidade
Gerador de senhasSortear uma senha sólida antes de gerar o hash
Gerador de hashCalcular 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 devolvidos por uma área protegida
Teste HSTSGarantir que o acesso protegido passe mesmo por HTTPS

Recursos úteis


Compromisso de confidencialidade

A sua senha é transmitida à API CaptainDNS unicamente para calcular o hash, em uma conexão criptografada. Ela não é armazenada nem registrada. Só ficam métricas técnicas anônimas (tempo de processamento, código de resposta).