O que é bcrypt?
Bcrypt é uma função de hashing de senhas projetada por Niels Provos e David Mazières, baseada no cifrador Blowfish. Ao contrário de digests rápidos como MD5 ou SHA-256, bcrypt é deliberadamente lento e computacionalmente caro — isso torna ataques de força bruta contra hashes de senhas roubados impraticáveis. Bcrypt gera automaticamente um salt aleatório por senha, então senhas idênticas produzem hashes diferentes.
Como o bcrypt funciona?
O algoritmo bcrypt é executado inteiramente no seu navegador. Veja o que acontece passo a passo:
- Sua senha é codificada como bytes UTF-8 e alimentada no agendamento de chaves do bcrypt, que inicializa o array P de 4.184 bytes e as caixas S do cifrador Blowfish usando a senha e o salt.
- Um salt aleatório de 128 bits é gerado. O salt é misturado ao agendamento de chaves de modo que cada salt único produza um hash completamente diferente mesmo para a mesma senha.
- O agendamento de chaves é executado por 2^custo rodadas (ex., 2^10 = 1.024 iterações no custo 10). Cada iteração recifra o salt e as entradas do array P, tornando o cálculo mais lento conforme o custo aumenta.
- A saída final é uma string de 60 caracteres no formato
$2b$<cost>$<salt><hash>, onde cost é preenchido com zero à esquerda (ex., 10), salt são 22 caracteres Base64, e hash são 31 caracteres Base64. - Para verificação, o mesmo algoritmo é executado novamente com a senha candidata e o salt extraído do hash armazenado. Se o hash derivado corresponder ao armazenado, a senha está correta.
Qual fator de custo devo usar?
O fator de custo é o logaritmo do número de iterações — custo 10 significa 2^10 = 1.024 rodadas, custo 12 significa 4.096 rodadas. Escolha com base nas suas necessidades de segurança e hardware:
- Custo 4-6 (16-64 rodadas) — apenas para desenvolvimento e testes. Rápido demais para produção; fornece proteção mínima.
- Custo 8 (256 rodadas) — mínimo necessário para aplicações não críticas. Cerca de 6 ms em hardware moderno.
- Custo 10 (1.024 rodadas) — linha de base atual recomendada. Leva cerca de 25 ms. Bom para a maioria das aplicações web.
- Custo 12 (4.096 rodadas) — recomendado para portais administrativos, sistemas financeiros e aplicações de alta segurança. Leva cerca de 100 ms.
- Custo 14 (16.384 rodadas) — alta segurança. Leva cerca de 400 ms. Use para senhas mestras, chaves de criptografia, ou quando a latência de login for aceitável.
Por que usar este gerador de bcrypt?
- Sua privacidade é protegida — cada senha é hasheada localmente no seu navegador e nenhum dado sai do seu dispositivo.
- Você tem ambos os modos lado a lado: gerar novos hashes ou verificar os existentes sem trocar de página.
- O fator de custo é ajustável de 4 (rápido) a 15 (muito lento), para que você possa atender às necessidades de segurança da sua aplicação.
- Os hashes usam o formato padrão
$2b$que funciona com todas as principais linguagens e frameworks.
Quais são as aplicações comuns do bcrypt?
Bcrypt é amplamente usado para armazenamento e verificação de senhas na indústria:
- Autenticação de aplicações web — armazenar hashes de senhas de usuários em bancos de dados para que senhas em texto plano nunca sejam salvas.
- Hashing de chaves de API — hashear segredos de API antes de armazená-los, para que uma violação de banco de dados não vaze credenciais válidas.
- Auditoria de migração — verificar se hashes de senhas legados de um sistema antigo ainda autenticam usuários após atualizar a camada de autenticação.
Como é um hash bcrypt?
Hashear a senha hunter2 com fator de custo 10 produz uma string como $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. O formato se divide em: $2b$ (versão do algoritmo), 10 (fator de custo), $, depois 22 caracteres de salt e 31 caracteres de hash, todos codificados em Base64. Cada execução com a mesma senha produz um hash diferente por causa do salt aleatório.
Este gerador de bcrypt é executado inteiramente no seu navegador usando uma implementação em JavaScript puro. Hasheie senhas antes de armazená-las, verifique hashes existentes e ajuste o fator de custo para atender aos seus requisitos de segurança — tudo sem enviar um único byte a um servidor.