Hash e Segurança

Gerador PHP password_hash()

Execute o password_hash() do PHP com o algoritmo e o custo de sua escolha.

Avalie esta ferramenta

Como usar Gerador PHP password_hash()

  1. Digite a senha que deseja fazer o hash.
  2. Escolha o algoritmo — PASSWORD_DEFAULT e PASSWORD_BCRYPT usam o fator de custo; as opções Argon2 o ignoram.
  3. Clique em Executar password_hash() e copie o hash resultante.

Sobre Gerador PHP password_hash()

Esta é a própria função password_hash() do PHP, executada no servidor exatamente como seria executada no seu código. Escolha o algoritmo através das mesmas constantes que o PHP usa — PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I ou PASSWORD_ARGON2ID —, defina um custo, e você recebe de volta a string exata que a função produz, além do detalhamento que password_get_info() reporta. É a forma rápida de ver o que uma determinada senha e configuração realmente geram, sem precisar rodar um script.

Duas coisas são verdadeiras para todo hash aqui e valem a pena entender. Primeiro, a saída é salgada automaticamente, portanto executar a mesma senha duas vezes gera dois hashes diferentes — isso é correto, não um bug, e é por isso que você nunca deve comparar hashes refazendo o hash. Você verifica uma senha com password_verify($password, $hash), que lê o sal e o custo a partir do hash armazenado e faz a comparação por você. Segundo, o custo (bcrypt) e os parâmetros de memória e tempo (Argon2) são deliberadamente lentos: eles definem o quão caro é cada tentativa para um invasor, portanto um custo mais alto é mais seguro, mas demora mais. Esta ferramenta limita o bcrypt ao custo 12 e usa parâmetros Argon2 fixos para que um endpoint público não possa ser transformado em um dreno de CPU.

O PASSWORD_DEFAULT é bcrypt em todas as versões do PHP até hoje, mas é definido como "o que quer que o PHP atualmente considere melhor", portanto pode mudar em uma versão futura — o que é exatamente o motivo pelo qual você armazena o algoritmo dentro do hash e deixa o password_verify() resolver isso. Para a maioria dos novos projetos, o Argon2id é a melhor prática atual. Observe que o bcrypt ignora silenciosamente qualquer conteúdo além dos primeiros 72 bytes de uma senha, portanto esta ferramenta rejeita uma senha mais longa em vez de fazer o hash de uma versão truncada. Precisa verificar um hash em vez de criar um? Use o verificador de bcrypt e Argon2, ou compare algoritmos com o gerador Argon2. As senhas são hasheadas e descartadas — nunca registradas ou armazenadas.

Perguntas frequentes

Qual algoritmo devo escolher?

Para novos projetos, PASSWORD_ARGON2ID é a melhor prática atual onde a sua versão do PHP o suporta. PASSWORD_DEFAULT também é uma escolha segura e portátil — é bcrypt hoje e o PHP o atualiza ao longo do tempo. O simples PASSWORD_BCRYPT é adequado e universalmente disponível.

Por que a mesma senha gera um hash diferente a cada vez?

Porque password_hash() gera um novo sal aleatório a cada chamada e o armazena dentro da saída. É exatamente isso que você deseja — impede que duas senhas idênticas produzam hashes idênticos. Nunca compare senhas refazendo o hash; use password_verify() em vez disso.

O que o fator de custo faz?

Para bcrypt (e PASSWORD_DEFAULT), ele define quantas rodadas de trabalho cada hash exige — cada +1 aproximadamente dobra o tempo. Quanto maior, mais resistente a ataques de força bruta, mas mais lento para calcular. As opções Argon2 ignoram esse custo e usam parâmetros fixos de memória e tempo.

Como eu verifico uma senha em relação a um desses hashes mais tarde?

Chame password_verify($password, $hash). Ela lê o algoritmo, o sal e o custo a partir do hash armazenado e retorna true ou false. Você não precisa saber ou armazenar o algoritmo separadamente — ele faz parte da string do hash.

É seguro fazer o hash de uma senha real aqui?

A senha é enviada ao servidor, hasheada e imediatamente descartada — nada é registrado ou armazenado, e a resposta carrega um cabeçalho no-store. Ainda assim, para uma senha que você realmente usa em produção, gerar o hash dentro do seu próprio ambiente é sempre a escolha mais cautelosa.