Sobre esta ferramenta
Bcrypt é uma função de hashing de senhas projetada para ser deliberadamente lenta, que é exatamente o que você quer: torna a adivinhação por força bruta cara. Seu fator de custo permite aumentar essa lentidão conforme o hardware fica mais rápido. Use a aba Hash para transformar uma senha em um hash bcrypt e semear um banco de dados de teste, e a aba Verificar para checar se uma senha corresponde a um hash que você já tem.
Roda no seu navegador com a biblioteca bcryptjs, então nenhuma senha é enviada a um servidor. Note que bcrypt serve para armazenar senhas, não para uma criptografia reversível.
Perguntas frequentes
Por que usar bcrypt em vez de SHA-256 para senhas?
O SHA-256 é rápido — ótimo para integridade de arquivos, mas péssimo para senhas, porque atacantes conseguem testar bilhões de tentativas por segundo. O bcrypt é propositalmente lento e inclui um salt aleatório por hash, o que torna a força bruta e os ataques com rainbow tables pré-computadas impraticáveis.
O que significa o número de "custo" (cost)?
O custo é um fator de trabalho em potência de dois: cada +1 aproximadamente dobra o tempo para calcular um hash. Custo 10 (o padrão) leva algumas dezenas de milissegundos; custo 14-15 pode levar segundos. Escolha o custo mais alto que seu servidor consiga suportar por login sem virar um gargalo.
Minhas senhas são enviadas para um servidor?
Não. O hash e a verificação rodam inteiramente no seu navegador, em um Web Worker quando disponível, para que o hashing de custo 15 não trave a aba. Nada do que você digita aqui é transmitido ou armazenado em lugar nenhum.
Por que cada hash bcrypt da mesma senha é diferente?
O bcrypt gera um novo salt aleatório a cada vez que você faz o hash, e esse salt fica embutido na própria string de saída ($2b$10$<salt><hash>). Isso é esperado, e é exatamente o que impede que duas senhas idênticas gerem hashes idênticos.
Por que a verificação falhou com "formato de hash inválido" em vez de "não corresponde"?
Um hash bcrypt válido sempre corresponde ao padrão $2a/b/x/y$<custo>$<53 caracteres>. Se o que você colou não corresponde — truncado, algoritmo errado, espaço extra — isso é um problema diferente de uma senha errada, por isso é relatado separadamente.