Gerador e verificador de bcrypt
Gere o hash bcrypt de uma senha para o seed ou a migration do seu usuário de teste, ou confira se uma senha bate com o hash salvo no banco. Custo configurável, prefixos $2b$, $2a$ e $2y$, e o cálculo roda em segundo plano, sem travar a página.
Use para massa de teste, seed e depuração de login. A senha é a que você digita: esta página não cria senhas.
Cada ponto a mais dobra o tempo. 10 a 12 é o comum em produção; 4 deixa os testes automatizados rápidos.
Estimativa neste aparelho: medindo…
Padrão atual. Node (bcrypt, bcryptjs), Python e Go.
Os três geram o mesmo hash para a mesma senha e salt; só o rótulo muda. Use o que o seu sistema grava para o seed ficar igual aos outros registros.
Digite uma senha para gerar o hash.
Precisa de MD5 ou SHA-256 para checksum, e não para senha? Use o gerador de hash.
O que é bcrypt
bcrypt é um algoritmo de hash de senha criado em 1999, baseado na cifra Blowfish. Ele sorteia um salt de 16 bytes para cada senha e repete o trabalho 2 elevado ao custo vezes. O resultado guarda tudo o que é preciso para verificar depois: prefixo, custo, salt e hash, num texto de 60 caracteres. Por isso a mesma senha gera um hash diferente a cada vez, e a verificação usa o salt que está dentro do próprio hash.
Por que não MD5 ou SHA-256 para senha
MD5 e SHA-256 foram feitos para ser rápidos: uma placa de vídeo testa bilhões por segundo. Se o banco vazar, as senhas comuns aparecem em minutos. O bcrypt é lento de propósito. Com custo 12, cada tentativa leva dezenas de milissegundos, o que não pesa num login e torna inviável testar milhões de senhas. Um salt fixo para o sistema todo não resolve, porque o atacante só precisa refazer a tabela uma vez.
Como escolher o custo
O custo é o expoente: 10 faz 1.024 rodadas, 12 faz 4.096. Escolha o maior valor que o seu servidor aguenta sem deixar o login lento, e aumente com o tempo. Em teste automatizado, custo 4 deixa a suíte rápida sem mudar a lógica, desde que o código de produção leia o custo da configuração. O hash guarda o custo, então senhas antigas continuam validando depois da mudança.
O limite de 72 bytes
O bcrypt só usa os primeiros 72 bytes da senha e ignora o resto sem avisar. São bytes em UTF-8, não caracteres: ç e ã valem 2, emoji vale 4. Algumas bibliotecas recusam senhas maiores, outras cortam. Se o seu sistema aceita frases longas, limite o tamanho no cadastro ou aplique um hash antes, como faz o Django.
$2a$, $2b$ e $2y$
O $2a$ é a versão de 1999. Em 2011 um bug na implementação do PHP levou ao $2y$, que marca os hashes corretos, e em 2014 o OpenBSD corrigiu um erro com senhas de mais de 255 bytes e criou o $2b$. Hoje as bibliotecas tratam os três como equivalentes: um hash $2y$ do Laravel valida em Node, e um $2a$ do Spring valida em Python. Esta página verifica os três.
Usuário de teste em seed e migration
Gere o hash aqui e grave o valor pronto no seed, em vez de chamar a biblioteca a cada execução. Assim o seed fica determinístico e rápido. Guarde a senha em texto só na documentação do ambiente de teste, nunca no repositório de produção. E confira o tamanho da coluna: o hash tem 60 caracteres, e VARCHAR(255) evita problema se o algoritmo mudar no futuro.
Perguntas frequentes sobre bcrypt
Custo, prefixos, limite de 72 bytes e o que conferir quando o login falha.