Gerador e verificador de bcrypt
Digite um texto, escolha o custo e gere o hash bcrypt correspondente — ou cole um hash e confira se um texto bate com ele. A ferramenta mostra o tempo gasto no seu aparelho e separa o hash em versão, custo, sal e resultado. O cálculo roda inteiro no navegador: o texto e o hash não são enviados a nenhum servidor nem ficam salvos.
Como usar
- Gerar: digite o texto, ajuste o custo (o padrão é 10) e clique em “Gerar hash”. A barra mostra o progresso e, no fim, aparece o tempo que o seu aparelho levou.
- Verificar: cole o texto e o hash nos campos de baixo e clique em “Verificar”. O formato do hash é conferido antes: a página avisa se ele foi cortado, se tem caractere inválido ou se o custo não existe.
- Entender: as partes do hash aparecem coloridas, com a explicação de cada uma.
Use para criar o hash de um usuário de teste no banco de dados, conferir se o compare do seu backend está certo, descobrir com que custo um hash antigo foi gerado ou medir quanto tempo cada custo leva.
O que é bcrypt
O bcrypt é uma função de hash feita especificamente para guardar senhas. Foi apresentado em 1999 por Niels Provos e David Mazières e é baseado na cifra Blowfish. Ao contrário de SHA-256 ou MD5, que são rápidos por projeto, o bcrypt é lento de propósito e tem um custo ajustável: quem rouba um banco de dados precisa gastar esse mesmo tempo em cada tentativa de adivinhar cada senha.
Ele também embute um sal aleatório de 16 bytes em cada hash. Por isso duas pessoas com a mesma senha têm hashes diferentes, e gerar o hash do mesmo texto duas vezes dá dois resultados distintos — ambos conferem. Não existe “descriptografar bcrypt”: a única forma de conferir é refazer a conta com o sal e o custo que estão no próprio hash.
Anatomia de um hash bcrypt
Um hash bcrypt tem sempre 60 caracteres. Este é um dos vetores de teste públicos do algoritmo (a senha é U*U):
$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW| Parte | Exemplo | Significado |
|---|---|---|
| Versão | $2a$ | Variante do algoritmo |
| Custo | 05 | A etapa cara é repetida 2⁵ = 32 vezes |
| Sal | CCCCCCCCCCCCCCCCCCCCC. | 22 caracteres = 16 bytes (128 bits) |
| Hash | E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW | 31 caracteres = 23 bytes (184 bits) |
O sal e o hash usam um Base64 próprio do bcrypt, com o alfabeto ./A-Za-z0-9 — não é o mesmo do Base64 comum.
$2a$, $2b$ e $2y$
$2a$— revisão que definiu a senha como texto UTF-8 terminado em byte nulo. É o prefixo de muitos hashes antigos.$2b$— versão atual, adotada no OpenBSD 5.5 (2014) para corrigir o tratamento de senhas muito longas naquela implementação. É o prefixo que esta página gera.$2y$— prefixo criado pelo crypt_blowfish (usado no PHP a partir da versão 5.3.7) para marcar a versão corrigida de um defeito com caracteres não ASCII. Opassword_hash()do PHP gera$2y$.
Para senhas de até 72 bytes, as três variantes calculam exatamente o mesmo resultado; por isso a verificação aqui aceita qualquer uma. Já o $2x$, que marca hashes da versão defeituosa, não é verificado.
Qual custo usar
O custo é um expoente: custo 10 são 2¹⁰ = 1.024 repetições, custo 12 são 4.096. Cada ponto a mais dobra o tempo. A recomendação da OWASP (Password Storage Cheat Sheet, consultada em outubro de 2026) é usar fator de trabalho 10 ou mais. Na prática, escolha o maior custo que o seu servidor aguenta sem deixar o login lento nem facilitar ataques de negação de serviço, e meça no hardware de produção — o tempo mostrado nesta página é o do seu navegador, com uma implementação em JavaScript, bem mais lenta que as bibliotecas nativas.
Como o custo fica gravado no hash, dá para aumentá-lo com o tempo: no login, se o hash guardado tiver custo menor que o atual, gere um novo com a senha que o usuário acabou de digitar.
O limite de 72 bytes
O bcrypt só usa os primeiros 72 bytes da senha; o que vem depois é ignorado. São bytes, não caracteres: em UTF-8, ç e ã ocupam 2 bytes, € ocupa 3 e a maioria dos emojis ocupa 4. Uma frase de 40 letras com vários acentos pode passar do limite. A página conta os bytes enquanto você digita e avisa quando o texto ultrapassa 72.
Para aceitar senhas maiores, algumas aplicações fazem um pré-hash antes do bcrypt. Isso tem armadilhas próprias (bytes nulos no meio do resultado, password shucking); siga a orientação da OWASP em vez de improvisar.
Bcrypt, Argon2id, scrypt ou PBKDF2?
| Algoritmo | Característica | Recomendação mínima da OWASP (2026) |
|---|---|---|
| Argon2id | Custo de tempo e de memória; vencedor da Password Hashing Competition (2015), RFC 9106 | 19 MiB de memória, 2 iterações, paralelismo 1 |
| scrypt | Custo de tempo e de memória; RFC 7914 | N = 2¹⁷, r = 8, p = 1 |
| bcrypt | Custo só de tempo, memória fixa e pequena; limite de 72 bytes | Fator de trabalho 10 ou mais |
| PBKDF2 | Custo só de tempo; exigido onde é preciso conformidade com FIPS 140 | 600.000 iterações com HMAC-SHA256 |
A OWASP indica Argon2id como primeira escolha para sistemas novos, scrypt quando ele não está disponível e bcrypt para sistemas legados que já o usam. Exigir muita memória é o que encarece ataques com placas de vídeo e hardware dedicado — e é o que o bcrypt não faz. Ainda assim, um bcrypt com custo adequado continua sendo uma forma aceitável de guardar senhas e é incomparavelmente melhor que MD5, SHA-1 ou SHA-256 puros.
Limitações
- Custo de 4 a 15 na geração. Hashes colados com custo maior são verificados, mas podem demorar minutos.
- O cálculo roda na página, em blocos curtos; em custos altos a rolagem pode dar pequenas engasgadas.
- Não digite senhas reais de produção em sites. Para testes, use senhas de exemplo — o gerador de senha cria uma na hora.
Ferramentas relacionadas
- Gerador de HMAC — assinatura de mensagens com chave secreta.
- Gerador de senha segura e gerador de senha por frase.
- Decodificador de JWT — para inspecionar tokens de autenticação.
- Gerador de UUID — identificadores para os registros de teste.
Perguntas frequentes
Dá para descobrir a senha a partir do hash bcrypt?
Não diretamente. O bcrypt é uma função de mão única; a única forma é testar senhas candidatas, uma a uma, pagando o custo em cada tentativa. Senhas fracas ou comuns continuam vulneráveis a esse tipo de ataque, com qualquer algoritmo.
Por que o hash muda toda vez que eu gero?
Porque um sal novo de 16 bytes é sorteado a cada geração. Todos os hashes são válidos para o mesmo texto: na verificação, o sal é lido do próprio hash.
Um hash gerado aqui funciona em PHP, Node.js, Python ou Java?
Sim: o bcrypt é um formato padronizado, e o $2b$ é a versão atual. Se alguma biblioteca mais antiga só aceitar $2a$ ou $2y$, basta trocar o prefixo — para senhas de até 72 bytes, o cálculo é o mesmo.
Bcrypt é criptografia?
Não. Criptografia é reversível com a chave; hash de senha não tem volta. Se a intenção é proteger um texto para ler depois, use criptografia com senha.
Preciso guardar o sal em outra coluna?
Não. O sal, o custo e a versão já fazem parte dos 60 caracteres do hash. Basta uma coluna de texto que comporte o hash inteiro — e folga para trocar de algoritmo no futuro.
Minha senha é enviada para algum servidor?
Não. O hash é calculado por JavaScript no seu navegador, sem requisições de rede e sem gravar nada no aparelho. Mesmo assim, por hábito de segurança, teste com senhas de exemplo.