Configuração
Gera hashes bcrypt para armazenar senhas e verifica se uma senha corresponde a um hash existente. No modo Gerar, escolha o custo e a versão; no modo Verificar, cole o hash e a senha a conferir. O resultado mostra cada parte do hash e quanto tempo levou para ser calculado.

Um hash bcrypt não pode ser "descriptografado": para saber se uma senha é a correta, use o modo Verificar. Tudo é calculado no seu navegador e a senha não é enviada a nenhum servidor.

Parâmetros
Entre 4 e 15

Versão atual. É gerada pelo OpenBSD, Node.js, Python, Go e Rust.

Cada ponto de custo dobra o tempo de cálculo. A OWASP recomenda no mínimo 10; o ideal é o valor mais alto que o seu servidor consiga calcular em cerca de 250 ms.

0 de 72 bytes

Como funciona

O bcrypt é uma função de hash criada para armazenar senhas. Diferentemente do SHA-256 ou do MD5, que são calculados em microssegundos, o bcrypt é lento de propósito: assim, quem roubar um banco de dados leva anos para testar senhas por força bruta.

Cada hash guarda tudo o que é necessário para verificá-lo: a versão do algoritmo, o custo e um salt aleatório de 128 bits. Por isso a mesma senha gera um hash diferente a cada vez e não é preciso armazenar o salt separadamente.

O custo é o logaritmo na base 2 da quantidade de rodadas: com custo 10 são calculadas 1024 rodadas e com custo 12, 4096. Aumentar um ponto dobra o tempo de cálculo, o que permite acompanhar o aumento da potência do hardware sem trocar de algoritmo.

Exemplos

rasmuslerdorf$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1aO exemplo de password_verify() do manual do PHP: cole-o no modo Verificar com essa senha e ele coincide.
abc$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0iUm vetor de teste do jBCrypt com custo 6. Os primeiros 22 caracteres depois do custo são o salt; os 31 restantes, o resultado.

Casos de uso

  • Criar o hash da senha inicial de um usuário administrador para inseri-lo diretamente no banco de dados.
  • Verificar se uma senha corresponde ao hash armazenado quando um usuário não consegue fazer login.
  • Gerar hashes de teste para fixtures, seeds ou testes automatizados de uma aplicação Laravel, Spring, Django ou Node.js.
  • Medir quanto tempo cada custo leva para escolher o valor adequado antes de configurá-lo no servidor.
  • Criar entradas para arquivos .htpasswd do Apache, que aceitam hashes bcrypt com o prefixo $2y$.

Perguntas frequentes

É possível descriptografar um hash bcrypt?

Não. O bcrypt é uma função de mão única: não há como obter a senha a partir do hash. A única possibilidade é testar senhas candidatas e ver se alguma coincide, que é justamente o que o bcrypt torna lento.

Qual é a diferença entre $2a$, $2b$ e $2y$?

As três calculam a mesma coisa para senhas normais. $2a$ é a versão original; $2y$ foi introduzida pelo PHP em 2011 para distinguir seus hashes dos de uma implementação com um bug; $2b$ foi adotada pelo OpenBSD em 2014 ao corrigir outro bug com senhas de mais de 255 caracteres. Quase todas as bibliotecas aceitam as três ao verificar.

Qual custo convém usar?

A OWASP recomenda no mínimo 10. O ideal é o valor mais alto que o seu servidor consiga calcular em cerca de 250 ms por login. O Spring Security usa 10 por padrão; o Laravel 11 e o PHP 8.4 aumentaram o deles para 12.

Por que o bcrypt ignora o que passa de 72 bytes?

O algoritmo usa a senha como chave do Blowfish, que aceita até 72 bytes. O que sobra é descartado sem aviso, de modo que duas senhas que compartilham os primeiros 72 bytes geram o mesmo hash. Caracteres acentuados ou emojis ocupam de dois a quatro bytes; por isso a ferramenta conta bytes e não caracteres.

O que é melhor, bcrypt ou Argon2?

O Argon2id é o algoritmo recomendado hoje para sistemas novos porque, além de lento, usa muita memória, o que encarece os ataques com GPU. Ainda assim, o bcrypt continua seguro com um custo adequado e é o padrão no PHP, Laravel, Spring e Ruby on Rails.

Minha senha é enviada a algum servidor?

Não. O hash e a verificação são calculados no seu navegador e a senha nunca sai do seu dispositivo; ela também não é incluída no link para compartilhar a ferramenta.