O bcrypt foi apresentado em 1999 por Niels Provos e David Mazières, do projeto OpenBSD, em um artigo chamado “A Future-Adaptable Password Scheme”. A ideia central está no próprio título: uma função de hash para senhas precisa poder ficar mais lenta à medida que os computadores ficam mais rápidos. Enquanto uma função rápida como o SHA-256 permite que um invasor teste bilhões de candidatas, o bcrypt torna cada tentativa custosa, tanto para ele quanto para o servidor.
Como o bcrypt funciona
O bcrypt se baseia em uma variante do algoritmo de criptografia Blowfish, cuja preparação de chaves é propositalmente cara. Três elementos entram no cálculo:
- a senha, da qual só os primeiros 72 bytes são considerados;
- um salt aleatório, sorteado para cada senha;
- um fator de custo: cada unidade a mais dobra o tempo de cálculo.
O resultado reúne tudo o que é preciso para verificar a senha mais tarde: o identificador do algoritmo ($2y$ no PHP), o custo, o salt e o hash. A função password_verify() relê esses parâmetros e refaz o cálculo, sem necessidade de guardar o salt separadamente.
$hash = password_hash( $senha, PASSWORD_BCRYPT ); // custo 12 por padrão desde o PHP 8.4
password_verify( $digitada, $hash ); // true ou false
O bcrypt comparado a outros algoritmos
O guia da OWASP sobre armazenamento de senhas coloca o Argon2id como primeira escolha, o scrypt em seguida, e reserva o bcrypt para sistemas legados, com fator de custo de pelo menos 10 e atenção especial ao limite de 72 bytes. Ainda assim, o bcrypt continua muito difundido porque está disponível em todo lugar: é o único algoritmo que o PHP garante em todas as instalações. Em qualquer caso, ele protege muito melhor do que uma função rápida como MD5 ou SHA-1 usada sozinha, que pode ser calculada em velocidade enorme em uma placa de vídeo.
No WordPress
Durante anos, o WordPress usou a biblioteca phpass, baseada em MD5 com muitas iterações. O WordPress 6.8, lançado em 15 de abril de 2025, passou a usar bcrypt para as senhas dos usuários. Os detalhes, publicados no blog dos desenvolvedores do núcleo:

- A senha passa primeiro por um pré-hash HMAC-SHA384 e depois é codificada em base64, para que senhas com mais de 72 bytes mantenham toda a sua entropia.
- Os hashes levam o prefixo
$wp$2y$, que os diferencia de um bcrypt comum. - Os hashes antigos do phpass continuam aceitos e são convertidos para bcrypt no próximo login ou na próxima troca de senha de cada usuário.
- As senhas de aplicativo, as chaves de redefinição e alguns outros tokens usam outra função, o BLAKE2b da biblioteca Sodium; as senhas de aplicativo já criadas não são convertidas automaticamente.
- O filtro
wp_hash_password_algorithmpermite escolher o Argon2id se o servidor oferecer suporte, e owp_hash_password_optionspermite ajustar os parâmetros, como o custo.
Você não precisa fazer nada. Só tenha em mente que voltar para o WordPress 6.7 ou anterior impediria os usuários já convertidos de fazer login até redefinirem a senha. Nosso artigo sobre o wp-config.php comenta essa mudança e as chaves de segurança do arquivo.
O que o bcrypt não faz
O bcrypt protege as senhas depois de um vazamento do banco de dados: ele torna mais lenta a sua recuperação offline. Ele não faz nada contra um ataque de força bruta online na página de login, nem contra uma senha que já apareceu em um vazamento e é reutilizada em outro lugar, a base do credential stuffing. Para isso, conte com senhas únicas, limite de tentativas e a autenticação de dois fatores, que o WP Masquerade Pro oferece junto com a limitação de logins.