O que é Argon2id?
Argon2id é o algoritmo vencedor da Password Hashing Competition (2015) e é hoje o padrão recomendado pelo OWASP para armazenamento seguro de senhas. Combina resistência a ataques de GPU (Argon2d) e resistência a ataques de side-channel (Argon2i), sendo a variante híbrida mais equilibrada para uso geral.
Onde e por que usar?
Use Argon2id sempre que precisar armazenar senhas de usuários em banco de dados. Diferente de MD5 ou SHA-256 (algoritmos rápidos, facilmente quebráveis por GPUs modernas), o Argon2id é intencionalmente lento e exige muita memória RAM, tornando ataques de força bruta proibitivamente caros. É suportado nativamente pelo PHP 7.3+ via password_hash() com PASSWORD_ARGON2ID.
Como funciona?
No bloco "Gerar Hash", insira a senha e clique em "Gerar Argon2id". O hash é criado no servidor PHP e retornado via API — nunca armazenado. No bloco "Verificar Hash", insira a senha em texto claro e o hash armazenado; o servidor verifica a correspondência usando password_verify() sem precisar conhecer a senha original.
Quando usar e quando não usar
O gerador é útil para criar o usuário de homologação de um sistema novo e para ver, com um hash real na frente, que parâmetros o PHP está usando. O verificador resolve outro problema recorrente: o login que falha em produção. Com a senha de teste e o hash copiado do banco, dá para separar em segundos um hash corrompido de um erro no código que compara.
Não use com senha real, porque senha e hash são enviados ao servidor do site. Não use para migrar uma base, que deve ser feito no próprio sistema, no momento do login. E não use hash para dado que precisa ser lido de volta, como CPF que o atendimento consulta: hash não se desfaz, e esse caso pede criptografia com chave, não hash de senha.
Exemplo: anatomia de um hash gerado aqui
Senha de teste exemplo-teste. Resultado devolvido pelo servidor:
$argon2id$v=19$m=65536,t=4,p=1$RUF6RmZkN2dYQkw5ZVVyUg$Z7SSLW/oPe5jR+elDloeBDpjCXh6/MQ+JXm9vnTkphs
argon2id: a variante híbrida, que combina a resistência a ataque por GPU do Argon2d com a proteção contra ataque de canal lateral do Argon2i.v=19: versão 1.3 do algoritmo (0x13 em hexadecimal).m=65536: 65.536 KiB, ou 64 MiB de memória por cálculo.t=4: quatro passagens sobre essa memória.p=1: uma linha de execução.- O trecho seguinte é o salt, 16 bytes aleatórios em Base64, e o último é o hash de 32 bytes.
No verificador, a mesma senha com esse hash devolve "O hash confere com a senha!". Um detalhe que costuma confundir: exemplo-teste com um espaço no fim também confere, porque a página remove espaços das pontas antes de enviar. Um backend que não faz o mesmo vai recusar essa senha.
Como a geração e a verificação funcionam
Ao clicar em Gerar, a senha segue por POST para /api/generate-argon2. O PHP chama password_hash com PASSWORD_ARGON2ID e os parâmetros padrão da instalação, que são os do exemplo, sorteia o salt e devolve a string completa. Como memória, passagens e salt ficam registrados dentro da própria string, o hash se descreve sozinho: quem verifica não precisa saber com que configuração ele foi gerado.
A verificação vai para /api/verify-argon2 e usa password_verify, que lê os parâmetros do hash, refaz o cálculo com a senha informada e compara os resultados de forma resistente a ataque de tempo. Nenhum dos dois endpoints grava senha ou hash. Se um dia a configuração do servidor mudar, password_needs_rehash indica no seu sistema quais hashes antigos devem ser refeitos no próximo login.
Limitações
- Memória, passagens e paralelismo não são configuráveis. A página usa o padrão do PHP, acima do mínimo recomendado pelo OWASP (19 MiB, duas passagens e uma linha de execução).
- Espaços no começo e no fim da senha são removidos antes do envio, tanto na geração quanto na verificação.
- O verificador aceita qualquer hash que
password_verifyreconheça, inclusive Bcrypt ($2y$). Não confunda um "confere" com confirmação de que o hash é Argon2id. - O tempo de resposta depende do servidor do site, não do seu. Para calibrar os parâmetros de produção, meça no hardware que vai rodar o login.
- Precisa de conexão com a internet.
Privacidade
Diferente da maior parte desta Toolbox, esta ferramenta depende do servidor: senha e hash viajam por HTTPS até o PHP e voltam com o resultado, sem armazenamento. Por isso a regra é usar apenas senhas criadas para teste.
Para continuar
Como Armazenar Senhas de Usuários com Responsabilidade cobre salt, custo e migração com exemplos em PHP, e Argon2id em Apps de Fidelidade discute a escolha em uma base de milhões de clientes. Para criar a senha de teste, use o Gerador de Senhas; para comparar com Bcrypt, MD5 e SHA-256, o Gerador de Hash.
Perguntas frequentes
O que significam m=65536, t=4 e p=1 no hash Argon2id?
São os parâmetros de custo gravados no próprio hash: m é a memória em KiB (65.536 KiB equivalem a 64 MiB), t é o número de passagens sobre essa memória e p é o número de linhas de execução. Quanto maiores, mais caro fica testar senhas em massa, e mais recursos o servidor gasta em cada login.
Argon2id ou Bcrypt: qual escolher?
Para sistema novo, Argon2id, que é a primeira recomendação do OWASP para armazenamento de senhas. Bcrypt continua aceitável em sistemas legados ou em ambientes sem suporte a Argon2. O PHP oferece Argon2id pela constante PASSWORD_ARGON2ID desde a versão 7.3.
Por que a mesma senha gera um hash diferente a cada vez?
Porque cada geração sorteia um salt novo de 16 bytes, que fica gravado dentro do hash. Os dois resultados são válidos para a mesma senha, e a verificação usa o salt de cada um. Isso impede que duas contas com a mesma senha tenham o mesmo hash no banco.
Posso verificar um hash Bcrypt nesta página?
Sim. O verificador usa a função password_verify do PHP, que reconhece todos os formatos gerados por password_hash, inclusive Bcrypt com prefixo $2y$. Por isso uma resposta positiva não prova que o hash seja Argon2id: confira o prefixo da string.
A senha digitada fica armazenada?
Não. Senha e hash são enviados por HTTPS, processados pelo PHP e descartados, e os endpoints não gravam nada. Ainda assim, como o dado sai do seu computador, use apenas senhas criadas para teste.