Gerador & Verificador de Hash Bcrypt
Transforme uma palavra-passe num hash bcrypt $2b$, ou verifique uma palavra-passe contra um hash que já tenha. O hashing corre num Web Worker dentro do seu navegador — nada do que escreve é enviado para lado nenhum.
Não cole uma palavra-passe real de produção em nenhuma ferramenta online — incluindo esta.
Entrada
Palavra-passe e custo
Um salt novo de 16 bytes é gerado para cada hash, pelo que a mesma palavra-passe dá um hash diferente de cada vez. É esse o propósito de um salt, não um erro.
Custo 10 significa 2^10 = 1,024 rondas de preparação de chave. Cada passo acima duplica o trabalho — para quem está a tentar quebrar um ficheiro de palavras-passe roubado, e para o seu próprio servidor em cada início de sessão. A maioria dos sistemas em produção fica entre 10 e 12.
Os três prefixos produzem bytes de hash idênticos para palavras-passe com menos de 72 bytes; só o rótulo difere. O crypt() incluído no PHP não reconhece $2b$, pelo que um hash $2b$ falhará silenciosamente em password_verify(). Escolha $2y$ para PHP.
O hashing corre num Web Worker dentro deste separador. A palavra-passe nunca é enviada para a Wespner nem para mais ninguém — não há qualquer pedido para a enviar.
Resultado
hash bcrypt
Prima “Gerar hash”.
Custo, medido aqui
O que esta definição lhe custa
Estimativa: um hash é cronometrado neste separador com custo 8 e todos os outros custos são extrapolados a partir disso, duplicando. O seu próprio hardware e navegador decidem o número.
Esses números são de uma única thread de JavaScript. Um atacante real corre código nativo numa bancada de GPUs e é ordens de grandeza mais rápido — essa diferença é exatamente a razão pela qual o fator de custo tem de ser incómodo em vez de conveniente. O mesmo controlo também decide quanto CPU cada um dos seus próprios logins consome.
A ler a string
O que significam os 60 caracteres
$2b$12$LQv3c1yqBWVHxkd0LHAkCOYUtYgBuLIjrsGrDUgYqZbY7d0RfPbtq
Ambos os blocos usam o próprio alfabeto base64 do bcrypt, que começa em ./ e coloca os dígitos no fim — não é base64 padrão, e descodificá-lo como se fosse dá os bytes errados. Isso, mais a divisão 22/31, é uma forma rápida de confirmar que uma string é mesmo um hash bcrypt e não algo que apenas se parece com um.
Escolher um algoritmo
bcrypt, scrypt ou Argon2?
Esta ferramenta é apenas para bcrypt, de propósito. Aqui fica quando é a resposta certa e quando não é.
Lento por design, mas depende apenas de tempo de CPU e de 4 KB fixos de memória. GPUs e FPGAs paralelizam-no muito melhor do que aos designs mais recentes. Continua a ser uma escolha perfeitamente respeitável, é suportado literalmente em todo o lado, e o seu limite de 72 bytes de palavra-passe é a sua aresta mais surpreendente.
Adiciona um custo de memória ajustável, pelo que um atacante precisa de RAM por tentativa, não só de núcleos. Mais difícil de paralelizar de forma barata do que o bcrypt.
Vencedor da Password Hashing Competition de 2015 e o que a OWASP sugere agora para sistemas novos: controlos separados de tempo, memória e paralelismo, com a variante id a resistir tanto a ataques por GPU como por canal lateral. Se está a começar do zero e a sua plataforma o suporta, use-o. Se está a manter algo que já guarda hashes $2y$, o bcrypt com um custo sensato não é uma emergência — faça rehash no próximo login.
Prova
Verifique esta página com os vetores de teste publicados
Uma ferramenta de hashing que pede para ser confiada deve ser verificável. Estes são os vetores bcrypt de referência usados por implementações derivadas do OpenBSD; a página recalcula cada um a partir do seu próprio salt e compara carácter a carácter, depois gera e volta a verificar uma palavra-passe descartável em dois fatores de custo.
O lote executa 6 vetores publicados mais duas verificações de ida e volta.
Gere o seu próprio servidor de jogos?
Servidores de jogos Wespner com proteção DDoS, discos NVMe e ativação em poucos minutos.