Gere o hash de uma senha com bcrypt ou Argon2, ou confira com um hash salvo
Este gerador de hash de senha cria hashes bcrypt (<code>$2b$</code>, custo de 4 a 15) e hashes Argon2id, Argon2i e Argon2d no formato padrão de string PHC, com memória, iterações, paralelismo, salt e tamanho de saída definidos por você. Mude para <strong>Verificar</strong> para colar um hash do seu banco de dados, reconhecer o algoritmo e os parâmetros pelo prefixo e testar se uma senha confere. Cada hash usa um salt aleatório novo e mostra quanto tempo levou no seu dispositivo. O hashing roda em WebAssembly no seu navegador; a senha nunca é enviada.
Como gerar um hash bcrypt ou Argon2
- 1Escolha Hash e depois o algoritmo: Argon2id para sistemas novos, bcrypt para combinar com um existente.
- 2Defina o custo: um fator de custo do bcrypt ou um preset do Argon2 como OWASP 19 MiB, t=2. Ajuste memória, iterações e paralelismo manualmente se precisar reproduzir uma configuração.
- 3Digite a senha e clique em Gerar hash. O hash codificado, suas partes e o tempo gasto aparecem abaixo.
- 4Para conferir um hash, escolha Verificar, cole o hash salvo e a senha e clique em Verificar.
Por que senhas precisam de um hash lento
Um hash rápido como o SHA-256 é a ferramenta errada para senhas. Uma única placa de vídeo calcula bilhões de hashes SHA-256 por segundo, então uma tabela vazada de hashes SHA-256 de senhas pode ser adivinhada nesse ritmo. Funções de hash de senha são projetadas para ser lentas e, no caso do Argon2, para exigir muita memória, de forma que cada tentativa custe tempo e hardware de verdade. Uma configuração que leva um quarto de segundo no seu servidor custa ao atacante esse mesmo quarto de segundo a cada tentativa, para cada usuário.
Cada hash também carrega seu próprio salt aleatório, então dois usuários com a mesma senha recebem hashes diferentes e tabelas pré-calculadas não servem para nada. O salt e todos os parâmetros ficam dentro da string do hash, e é por isso que uma biblioteca consegue verificar uma senha só com o hash.
Como ler um hash bcrypt
Um hash bcrypt como $2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW tem quatro partes: a versão 2b, o custo 12 (212 = 4.096 rodadas de expansão de chave), um salt de 22 caracteres e um hash de 31 caracteres, ambos no alfabeto Base64 próprio do bcrypt. Cada ponto a mais de custo dobra o tempo.
$2a$, $2b$ e $2y$ calculam o mesmo resultado para senhas de até 72 bytes; as letras registram correções de bugs de implementações antigas. O bcrypt lê apenas os primeiros 72 bytes de uma senha e ignora o resto, e esta ferramenta avisa sobre isso — uma frase-senha longa, ou uma em escrita não latina em que um caractere ocupa de dois a quatro bytes, pode atingir esse limite antes do que você imagina.
Argon2id, Argon2i e Argon2d
A string PHC registra tudo o que é necessário para verificar: $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash> significa versão 1.3, 19.456 KiB de memória, 2 passagens e 1 lane, seguidos do salt e do hash em Base64 sem padding.
- Argon2id
- O híbrido das duas variantes abaixo e a recomendada pela RFC 9106 e pela OWASP para armazenar senhas. Use-a, a menos que algo obrigue o contrário.
- Argon2i
- Acesso à memória independente da senha, o que resiste a ataques de canal lateral, mas é mais fraco contra quebra por GPU com poucas passagens.
- Argon2d
- O acesso à memória depende da senha: o mais forte contra GPUs, mas exposto a canais laterais. Adequado para proof-of-work, não para servidores que validam logins.
Configurações recomendadas
- Argon2id: a OWASP recomenda 19 MiB de memória com 2 iterações e paralelismo 1, ou um equilíbrio equivalente como 47 MiB com 1 iteração ou 12 MiB com 3. A RFC 9106 sugere 64 MiB, 3 iterações e 4 lanes quando a memória permite.
- bcrypt: custo de pelo menos 10; 12 é um padrão comum hoje. Escolha o maior custo que seu endpoint de login aguenta — cerca de 250 ms por hash no servidor é uma meta razoável.
- Salt: 16 bytes aleatórios. Tamanho do hash: 32 bytes é mais que suficiente.
- O tempo medido aqui é no seu dispositivo, em WebAssembly, que costuma ser mais lento do que uma biblioteca nativa em um servidor. Faça benchmark no hardware de produção antes de decidir o custo.
Quando usar esta ferramenta
Use para criar um hash para um usuário de seed ou um arquivo de configuração, para conferir se um hash no seu banco de dados realmente corresponde à senha que você imagina, ou para descobrir com quais parâmetros um hash existente foi criado. Sua aplicação deve gerar o hash das senhas com a própria biblioteca no cadastro; ela nunca deve enviar senhas em texto puro para um site gerar o hash. Para criar uma senha forte antes de tudo, use o gerador de senhas; para assinaturas com chave em vez de armazenamento de senhas, veja o gerador HMAC.
Perguntas frequentes
- Devo usar bcrypt ou Argon2?
- Argon2id para sistemas novos: ele venceu a Password Hashing Competition e é memory-hard, o que torna a quebra com GPU e ASIC muito mais cara. O bcrypt ainda é aceitável e tem suporte muito amplo, então mantenha-o se sua stack já o usa.
- Por que o hash muda toda vez para a mesma senha?
- Cada hash usa um salt aleatório novo, então o resultado muda a cada vez. Isso é intencional. Para conferir uma senha, verifique-a contra o hash salvo em vez de comparar dois hashes recém-gerados.
- Dá para descriptografar um hash bcrypt ou Argon2?
- Não. São funções de mão única. A única forma de descobrir a senha é testar candidatas e gerar o hash de cada uma, o que esses algoritmos tornam lento de propósito.
- O que é o limite de 72 bytes do bcrypt?
- O bcrypt usa apenas os primeiros 72 bytes da senha. O que vier depois não afeta o hash, então duas senhas longas com os mesmos 72 bytes iniciais geram hashes que conferem. O Argon2 não tem esse limite.
- Qual fator de custo devo usar no bcrypt?
- Pelo menos 10, e 12 é um padrão comum. Cada incremento dobra o trabalho. Escolha o maior valor que mantenha o login rápido o suficiente no seu servidor.
- Hashes bcrypt $2a$, $2b$ e $2y$ são compatíveis?
- Sim, para senhas de até 72 bytes eles geram o mesmo hash. A maioria das bibliotecas aceita os três prefixos, e esta ferramenta verifica todos eles.
- Por que verificar demora tanto quanto gerar o hash?
- Verificar significa gerar o hash da senha de novo com o salt e os parâmetros salvos no hash e comparar os resultados, então custa exatamente o mesmo trabalho. É isso que torna as tentativas caras.
- A senha é enviada para um servidor?
- Não. bcrypt e Argon2 rodam em WebAssembly dentro do seu navegador. Nada do que você digita sai da página.