Gerador de bcrypt — gere e verifique hashes de senha com bcrypt
Gere o hash bcrypt de uma senha no custo que você escolher, confira uma senha com um hash bcrypt e veja o que significa cada parte do hash.
Gerar um hash bcrypt
Verificar uma senha contra um hash
| Versão | $2b$ | 2b — correção do OpenBSD de 2014 para senhas com mais de 255 bytes. Padrão atual do bcrypt (C/Python/Node). |
|---|---|---|
| Custo | 10 | 2^10 = 1.024 rodadas de expansão de chave |
| Salt | O.0JDwgDTALNNPsTWXP1YO | 22 caracteres = 128 bits aleatórios, Base64 do bcrypt |
| Hash | 2o9FuEFCZZMBsOKg910t7.RrUqVQsmW | 31 caracteres = 184 bits da saída de 192 bits |
As senhas são processadas e verificadas no seu navegador com bcryptjs. Nada é enviado, armazenado ou registrado. Mesmo assim, evite colar uma senha de produção real em qualquer página web. Ver todas as ferramentas grátis.
Encontrou um problema ou algo que poderia ser melhor? Lemos todas as mensagens e corrigimos rápido.
Este gerador de bcrypt gera o hash de uma senha com bcrypt num fator de custo de 4 a 15, verifica uma senha com um hash bcrypt existente e decompõe um hash em versão, custo, salt e digest. É útil para criar um usuário de teste, conferir se um hash do seu banco de dados corresponde a uma senha conhecida durante uma migração ou entender o que $2b$12$ realmente significa. O hash é gerado no seu navegador com bcryptjs, uma implementação em JavaScript compatível com as bibliotecas bcrypt usadas em Node.js, PHP, Python, Ruby e Go. Para criar várias contas de teste, o modo em lote gera o hash de uma lista de até 50 senhas de uma vez.
O bcrypt é lento de propósito, e cada ponto a mais no custo dobra o tempo. A ferramenta mostra o progresso enquanto trabalha e estima quanto outros fatores de custo levariam no seu dispositivo, para você ver o equilíbrio antes de escolher um para o servidor. Um cuidado que vale para qualquer ferramenta online: não cole uma senha real de produção numa página web que você não controla. Use esta ferramenta com valores de teste e para entender hashes.
Como usar
- Digite uma senha e escolha um fator de custo; de 10 a 12 é o típico para sistemas de login.
- Clique em Gerar hash. Uma barra de progresso aparece enquanto ele roda; com custo 14 ou 15, isso pode levar vários segundos.
- Copie o hash de 60 caracteres. Gerar de novo dá um hash diferente porque o salt é aleatório; os dois são válidos na verificação.
- Para conferir um hash, cole-o na seção de verificação junto com a senha candidata e clique em Verificar.
- Leia a tabela de anatomia do hash para ver qual versão e qual custo o hash usa.
Perguntas frequentes
Posso gerar o bcrypt de várias senhas de uma vez?
Sim. Mude para "Lista de senhas (em lote)", cole até 50 senhas, uma por linha (os espaços contam; linhas vazias são ignoradas) e clique em Gerar hash. Elas são processadas uma após a outra no custo que você escolheu, cada uma com o seu próprio salt aleatório, e a página continua respondendo enquanto isso. Copie os hashes na mesma ordem da sua lista ou baixe um CSV, com ou sem as senhas em texto puro. O limite existe porque o bcrypt é lento de propósito: 50 hashes com custo 12 já levam um tempo.
Que fator de custo devo usar no bcrypt?
Escolha o maior custo que mantenha um único hash com um atraso tolerável no seu servidor de produção, normalmente entre 100 ms e 1 segundo. No hardware de servidor atual, isso costuma ser de 10 a 12. O Password Storage Cheat Sheet da OWASP define um fator de trabalho mínimo de 10. Meça no servidor real, e não num notebook, e lembre-se de que um custo alto também facilita sobrecarregar o seu endpoint de login com requisições.
Por que a mesma senha gera um hash bcrypt diferente a cada vez?
Cada hash inclui um novo salt aleatório de 128 bits, guardado no próprio hash (os 22 caracteres depois do custo). Isso é proposital: dois usuários com a mesma senha recebem hashes diferentes, e tabelas pré-calculadas não servem para nada. Para conferir uma senha, o bcrypt lê o salt e o custo do hash armazenado, gera de novo o hash da senha candidata com eles e compara.
Dá para descriptografar um hash bcrypt?
Não. O bcrypt é um hash de mão única, não uma criptografia. O único jeito de recuperar uma senha a partir de um hash bcrypt é chutar candidatas e gerar o hash de cada uma, e o fator de custo torna cada tentativa cara. Esse é o objetivo: uma senha fraca ainda pode ser adivinhada, mas cada tentativa consome tempo real de CPU em vez de nanossegundos.
Qual é a diferença entre $2a$, $2b$ e $2y$?
Eles indicam revisões da implementação do algoritmo. O $2a$ foi a versão usada por muito tempo; o $2b$ foi introduzido pelo OpenBSD em 2014 para corrigir o tratamento de senhas com mais de 255 bytes; o $2y$ é o marcador do PHP para hashes gerados depois que ele corrigiu um bug de extensão de sinal em 2011. Para hashes criados por bibliotecas atuais, a verificação funciona do mesmo jeito, e a maioria das bibliotecas aceita os três.
Existe um tamanho máximo de senha no bcrypt?
Sim. O bcrypt usa só os primeiros 72 bytes da senha e ignora o resto, e a contagem é em bytes UTF-8, então uma senha com letras acentuadas ou emojis chega ao limite com menos caracteres. Esta ferramenta avisa quando você passa de 72 bytes. Se precisar aceitar frases-senha mais longas, limite o tamanho delas ou use Argon2id, que não tem esse limite.
Devo usar bcrypt ou Argon2?
Para um sistema novo, a OWASP recomenda primeiro o Argon2id, porque ele exige muita memória e, por isso, é mais caro de atacar com GPUs. O bcrypt continua sendo uma escolha sólida, com suporte em toda parte, e um sistema que já usa bcrypt com custo 10 ou mais não precisa mudar com urgência. O que mais importa é usar um desses algoritmos lentos e com salt, e não um simples SHA-256 ou MD5.
Anatomia de um hash bcrypt
Um hash bcrypt como $2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW tem sempre 60 caracteres e traz tudo o que é preciso para verificá-lo:
• $2b$: a versão do algoritmo.
• 12$: o fator de custo. A preparação da chave roda 2^12 = 4.096 vezes.
• R9h/cIPz0gi.URNNX3kh2O: 22 caracteres que codificam o salt aleatório de 128 bits.
• PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW: 31 caracteres que codificam 184 bits do resultado.
A codificação usa o alfabeto Base64 próprio do bcrypt (./A–Z a–z 0–9), que não é o alfabeto Base64 padrão, então as partes não podem ser decodificadas com um decodificador Base64 comum.
Por que hashes rápidos são errados para senhas
Hashes de uso geral como o SHA-256 são feitos para ser rápidos, e uma GPU moderna calcula bilhões deles por segundo. Se vaza um banco de dados de hashes de senha em SHA-256, todas as senhas comuns e a maioria das curtas caem em poucas horas. Acrescentar um salt impede o uso de tabelas pré-calculadas, mas não deixa os chutes mais lentos.
O bcrypt resolve isso tornando cada hash propositalmente caro e ajustável. Com custo 12, um hash leva algo na ordem de um quarto de segundo num núcleo de servidor típico, cerca de um milhão de vezes mais que um único SHA-256 no mesmo núcleo, e o padrão de acesso à memória do bcrypt também faz com que ele rode mal em GPUs. À medida que o hardware fica mais rápido, você aumenta o custo; os hashes existentes podem ser atualizados na próxima vez que cada usuário fizer login.
O hash é só uma camada. Limite a taxa de tentativas de login, confira as novas senhas em listas de senhas vazadas, como recomenda o NIST SP 800-63B, e ofereça autenticação de dois fatores, para que uma senha adivinhada não baste sozinha.
Ferramentas grátis relacionadas
- Gerador de senhas — Gere uma senha aleatória forte, uma frase-senha fácil de lembrar ou um PIN. Funciona inteiramente no seu navegador; nada é enviado nem armazenado.
- Gerador de hash — Gere hashes de textos ou arquivos com MD5, SHA-1, SHA-256, SHA-384, SHA-512 e CRC32, verifique um checksum ou calcule um HMAC. Os arquivos nunca saem do seu dispositivo.
- Gerador TOTP — Transforme um segredo Base32 em códigos 2FA ao vivo com contagem regressiva, monte um QR Code otpauth:// para apps autenticadores ou leia uma URI existente.
- Decodificador JWT — Decodifique o header e o payload de um JWT, leia a expiração em linguagem simples, verifique assinaturas HS, RS, PS e ES ou assine um novo token. Nada sai do seu navegador.