Gerador de bcrypt

bcrypt ainda é uma das escolhas mais seguras para armazenar senhas. É deliberadamente lento, deriva seu próprio sal e se adapta a melhorias de hardware através de um parâmetro de custo ajustável. Este gerador produz um hash bcrypt compatível com os padrões a partir de uma senha em texto simples, para que você possa criar um usuário de teste, migrar uma conta entre sistemas ou comparar valores com um hash existente armazenado na coluna users.password.

Como hash uma senha com bcrypt

  1. 1

    Digite a senha em texto simples

    Até 72 bytes — bcrypt truncará silenciosamente além disso.

  2. 2

    Escolha um fator de custo

    10 é o padrão atual; 12 é comum para novos sistemas; 14 é paranoico. Cada +1 dobra aproximadamente o tempo de hash.

  3. 3

    Um sal aleatório é gerado

    16 bytes de sal são extraídos de um RNG criptográfico e incorporados na string de hash resultante.

  4. 4

    Copie o hash

    A saída é uma string auto-descritiva como `$2b$12$...` que inclui versão, custo, sal e digestão.

Anatomia de um hash bcrypt

$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
  |   |  |                      |
  |   |  sal (22 caracteres Base64)  digestão (31 caracteres Base64)
  |   custo (2 dígitos, 4-31)
  versão (2a, 2b, 2y — todos bcrypt)

A string inteira tem 60 caracteres. Colunas tipadas como VARCHAR(60) ou CHAR(60) são o esquema padrão.

Recomendações de fator de custo

Custo Tempo aproximado por hash (CPU 2024) Caso de uso
10 ~80 ms Padrão legado, ainda aceitável
12 ~300 ms Base recomendada atual
13 ~600 ms Aplicativos de maior segurança
14 ~1.2 s Paranoico; atraso perceptível no login

Cada incremento dobra o fator de trabalho. Se a latência de login abaixo de 500 ms é crítica, mantenha-se em 10-12.

Byte de versão: 2a vs 2b vs 2y

  • $2a$ — Especificação original de 1999. A maioria das bibliotecas emitem hashes 2a.
  • $2b$ — Revisão de 2014 corrigindo um bug de truncamento no crypt_blowfish. Preferido para novos hashes.
  • $2y$ — Tag específica do PHP, funcionalmente equivalente a $2b$.

Todos os três verificam entre si; apenas a tag na string de hash difere.

O que bcrypt protege

  • Tabelas arco-íris — Sal único por hash derrota buscas pré-computadas.
  • Quebra por GPU/ASIC — O cronograma de chaves Blowfish é limitado por memória e hostil a GPUs. Não é tão hostil a GPUs quanto Argon2, mas ainda é lento para força bruta.
  • Vazamentos de banco de dados — O texto simples nunca é recuperável do hash sem força bruta.

O que bcrypt NÃO protege: senhas fracas (use um comprimento mínimo e verifique listas de vazamento), preenchimento de credenciais (use um segundo fator), phishing.

Limite de 72 bytes

bcrypt usa apenas os primeiros 72 bytes da senha. Entradas mais longas são truncadas silenciosamente, que é a mesma razão pela qual muitas bibliotecas agora recomendam pré-hash a senha com SHA-256 antes de alimentá-la ao bcrypt. Alternativas modernas (Argon2, scrypt) não têm tal limite.

Perguntas frequentes

Sim para armazenamento de senhas, com custo ≥ 12. A OWASP ainda o lista como um algoritmo aceitável. Argon2id é a escolha preferida para novos sistemas, mas migrar hashes bcrypt legados é uma preocupação de baixa prioridade.

Porque o sal é gerado aleatoriamente por hash. A verificação pega o sal do hash armazenado, re-hash a senha submetida com ele e compara.

A maioria das bibliotecas não expõe isso, e por boas razões — sais previsíveis derrotam o propósito. Use o sal gerado pela biblioteca; esse é o caminho seguro.

Sim — o fator de trabalho é simétrico. Verificar um hash de custo 14 leva 16x mais tempo do que verificar um de custo 10. Ajuste com seu throughput de login em mente.

Ferramentas relacionadas