Command Palette

Search for a command to run...

Como funciona o Bcrypt: sal, fator de custo e limites

Como funciona o Bcrypt: sal, fator de custo e limites

T
Toolz Team
|Sep 13, 2026|17 min ler
Prefira Toolz.dev no Google

Parte da coleção segurança

Gerador BCrypt

Gere e verifique hashes de senha bcrypt no navegador com um fator de custo ajustável

Use o Gerador BCrypt

A primeira vez que enviei um sistema de login, fiz a coisa que todos os tutoriais daquela época me diziam para fazer: armazenado md5($password) na tabela de utilizadores e seguiu em frente Funcionou, e foi silenciosamente um desastre Anos de construção de autenticação em plugins WordPress e aplicações Laravel mais tarde, tenho um respeito muito mais saudável pela lacuna entre o & quot; a verificação de senha passes" e o & quot; as senhas são seguras se esta base de dados vazar." o Bcrypt é a ferramenta que fecha a maior parte dessa lacuna, e é o padrão em quase todas as estruturas que EU alcancei Então EU construí um gerador bcrypt em Toolz.dev que hash uma senha com um fator de custo que você controla, verifica uma senha contra um hash existente, e faz tudo isso em seu navegador para que nada que você digite é enviado em qualquer lugar Este é o guia para ele e para bcrypt si mesmo.

tl;dr: O Bcrypt transforma uma senha em um hash salgado e deliberadamente lento de 60 caracteres, para que um banco de dados vazado não seja uma lista de senhas vazada O Toolz gerador bcrypt faz hash em qualquer senha com um fator de custo ajustável (4 a 31), verifica uma senha em relação a um hash que você cola e mostra a versão, o custo e o sal analisados. Ele produz o padrão $2b$ formate esse OpenBSD, PHP password_hashTodas as bibliotecas bcrypt Laravel e Node aceitam e são executadas inteiramente do lado do cliente.

O que é bcrypt?

Bcrypt é uma função de hash de senha projetada por Niels Provos e David Mazieres e apresentada em seu artigo USENIX de 1999 & quot; Um Esquema de Senha Adaptável para o Futuro". Ele é construído sobre a cifra de bloco Blowfish, mas com uma reviravolta: em vez de criptografar dados, ele executa Blowfish' s passo de configuração de chave uma e outra vez, usando a senha e um salt aleatório como material chave O resultado é um hash unidirecional que é barato para calcular uma vez e caro para calcular um bilhão de vezes, que é exatamente as necessidades de armazenamento de senha de propriedade.

Esse & quot; caro em proposit" ideia é o coração disso Um hash de uso geral como SHA-256 é projetado para ser rápido, porque somas de verificação e verificações de integridade querem velocidade O hashing de senha quer o oposto Se um invasor rouba seu banco de dados, a única coisa que fica entre eles e cada senha de texto simples é quanto tempo leva para adivinhar Um hash rápido permite que uma GPU moderna teste bilhões de candidatos por segundo; um hash bcrypt a um custo sensato limita isso a alguns milhares por segundo por núcleo Mesmo arquivo vazado, resultado totalmente diferente.

O Bcrypt sobreviveu mais de duas décadas porque acertou os fundamentos e porque é adaptável O fator de custo significa que o mesmo algoritmo que foi ajustado para o hardware de 1999 pode ser discado para o hardware de 2026 sem alterar mais nada Continua sendo uma opção recomendada no Folha de dicas de armazenamento de senha OWASP& it é o padrão out-of-the-box em Laravel, Spring Security, e muitas outras pilhas que EU trabalho em Se você quiser o fundo mais profundo sobre por que hashes rápidos estão errados para este trabalho, o ferramentas online de privacidade de dados o guia cobre o raciocínio que levou toda a indústria ao hashing lento e salgado.

O que contém um hash bcrypt?

Uma das coisas mais legais sobre o bcrypt é que sua saída é autodescritiva. Pegue um hash real:

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW

Leia da esquerda para a direita, divida nos cifrões e informa tudo o que é necessário para verificar uma senha em relação a ela:

campo exemplo sentido
versão 2b A variante bcrypt. 2b é o formato OpenBSD corrigido atual
custar 12 O fator de trabalho. A configuração da chave roda 2^12 = 4.096 iterações
Sal R9h/cIPz0gi.URNNX3kh2O 22 caracteres do Base64 personalizado, decodificando para 16 bytes aleatórios
Digerir PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW 31 caracteres que codificam a saída bcrypt de 23 bytes

Como o sal e o custo vivem dentro da string, a verificação não precisa de mais nada Quando você cola um hash no gerador bcrypt verifique o modo, ele lê o custo e o sal diretamente da string, recalcula o resumo com esse sal exato e compara Não há coluna de sal separada para gerenciar, o que é uma razão pela qual o bcrypt é tão agradável de armazenar: é um único campo opaco na tabela de usuários.

Vale a pena notar o alfabeto Base64 personalizado, porque ele faz as pessoas tropeçarem. Bcrypt usa ./A-Za-z0-9, que é uma ordenação diferente do padrão Base64. um sal bcrypt não é uma string Base64 padrão, então não tente decodificá-lo com uma ferramenta Base64 genérica e espere bytes significativos Se você estiver curioso sobre a variante padrão usada em qualquer outro lugar, o codificação base64 guia caminha pelo alfabeto normal e onde ele aparece.

Como faço para gerar um hash bcrypt?

Na ferramenta são três passos: digite uma senha, escolha um custo, clique em Gerar Sob o capô, gerar um hash faz mais do que parece Primeiro um sal aleatório criptograficamente forte de 16 bytes é criado usando a API Web Crypto Em seguida, o bcrypt executa seu cronograma de chaves caro, semeando Blowfish com a senha e salt e iterando 2 ↑ tempos de custo Finalmente ele criptografa uma corda mágica fixa (" OrpheanBeholderScryDoubt") 64 vezes com o estado de cifra resultante e Base64-codifica a saída Toda a dança produz o hash de 60 caracteres.

A única surpresa mais comum é que hashing a mesma senha duas vezes dá dois hashes diferentes Isso é correto e intencional Cada hash recebe seu próprio sal aleatório, então dois usuários que ambos escolhem hunter2 acabar com valores armazenados completamente diferentes Um invasor que rouba a tabela não pode dizer que duas contas compartilham uma senha, e não pode reutilizar uma tabela pré-computada entre contas Se você quiser reproduzir um hash específico para teste, você fornece a sequência de sal completa em vez de um custo nu, que é exatamente o que o modo de verificação faz internamente.

No seu código de aplicação nunca monta nada disto à mão Chamas a biblioteca:

// PHP
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// Node with bcrypt / bcryptjs
const hash = await bcrypt.hash(password, 12)
// Laravel
use Illuminate\Support\Facades\Hash;
$hash = Hash::make($password); // bcrypt by default

A ferramenta Toolz é para os momentos em torno desse código: verificação de sanidade como é um hash a um determinado custo, geração de um hash conhecido para um semeador ou um dispositivo elétrico de teste ou confirmação de que um hash que você encontrou em uma configuração corresponde à senha que você acha que sim.

Como escolho um fator de custo?

O factor de custo é o único botão em que você tem de pensar, e a resposta honesta é & quot; measure, do not copy." A regra prática do OWASP é que um único hash deve levar algo em torno de um quarto de segundo no seu hardware de produção Esse alvo equilibra duas forças opostas: muito baixo e você torna o cracking barato, muito alto e todo login legítimo paga o preço, o que importa quando um endpoint ocupado está hash em cada solicitação.

Porque o custo é um poder de dois, cada passo dobra o trabalho Custo 11 é duas vezes mais lento que o custo 10, custo 12 é quatro vezes mais lento No hardware típico do servidor dos anos 2020, custo de 10 a 12 pousa na vizinhança certa, e é por isso que os frameworks padrão lá A ferramenta mostra uma estimativa de tempo aproximado enquanto você arrasta o controle deslizante para que você possa sentir a rapidez com que os compostos de custo, mas trate isso como um guia relativo, não uma referência do seu servidor O número real depende da sua CPU, e a única maneira de saber é a hora password_hash na caixa que vai rodá-lo.

Um padrão prático que vale a pena conhecer: como o custo é armazenado dentro de cada hash, você pode aumentá-lo ao longo do tempo sem migração Em um login bem-sucedido, você tem o texto simples em mãos por um momento, então você verifica se o custo do hash & #39; armazenado está abaixo do seu alvo atual e, em caso afirmativo, refazer e atualizar O PHP expõe isso diretamente através password_needs_rehash. Isso significa que sua segurança acompanha o hardware sem nunca forçar a redefinição da senha.

Bcrypt versus SHA-256, Argon2 e scrypt

A comparação que mais importa é bcrypt contra um hash rápido simples, e contra as funções mais recentes de memória-difícil Aqui é como eles se alinham para armazenamento de senha:

Função Salgado Lento de propósito Memória difícil Bom para senhas?
MD5/ SHA-256 Não (por si só) não não Não, rápido demais
bcrypt Sim, construído em Sim, custo ajustável não Sim, recomendado
cripta sim sim sim sim
Argônio2ida sim sim sim Sim, preferido para novos sistemas

Um SHA-256 nu de uma senha, mesmo salgado, é a ferramenta errada: ele é projetado para velocidade, então um banco de dados vazado de hashes SHA-256 salgados cai rapidamente para uma GPU Se você só precisa de um resumo rápido para uma soma de verificação ou uma chave de cache em vez de uma senha, é isso que o gerador hash é para, e a distinção é o ponto inteiro Argon2id, o vencedor do Password Hashing Competition 2015, adiciona memória-dureza, que resiste ao hardware personalizado que pode acelerar bcrypt, e é a primeira escolha para um sistema novíssimo onde você controla o tempo de execução Mas bcrypt não é obsoleto É testado em batalha, é o padrão em ferramentas que uso diariamente, e escolhê-lo é uma decisão sólida, especialmente quando seu framework envia-lo O erro a evitar não é " bcrypt em vez de Argon2, & quot; é & quot; um hash rápido em vez de qualquer um deles. & quot; Para um passeio mais amplo dos utilitários de segurança que emparelham com hashing, o Ferramentas de produtividade do desenvolve guia tem o mapa.

E quanto ao limite de 72 bytes e outros gotchas?

O Bcrypt lê apenas os primeiros 72 bytes da senha Qualquer coisa passada que seja silenciosamente ignorada, o que para senhas normais nunca importa, mas pode morder uma senha muito longa, especialmente uma com caracteres UTF-8 de vários bytes, onde a contagem de bytes sobe mais rápido do que a contagem de caracteres A ferramenta avisa sempre que sua entrada cruza 72 bytes UTF-8 para que o truncamento nunca seja uma surpresa silenciosa Alguns sistemas trabalham em torno do limite pré-cortando a senha com SHA-256 e Base64-codificando-a antes de entregá-la ao bcrypt, que dobra uma senha arbitrariamente longa em uma entrada curta fixa; se você fizer isso, faça isso consistentemente tanto no login quanto no login.

O outro gotcha é o prefixo da versão Você verá $2a$, $2y$, e $2b$ na natureza. $2a$ foi o original, $2y$ foi uma tag específica de PHP introduzida após um bug de extensão de sinal ter sido encontrado em algumas implementações, e $2b$ é a versão atual corrigida do OpenBSD. Para novos hashes que você deseja $2b$, que é o que esta ferramenta produz Todos os três verificam de forma idêntica para senhas ASCII comuns; as diferenças só vêm à tona com bytes não ASCII particulares perto do limite de 72 bytes Quando você cola um token em uma ferramenta que também inspeciona credenciais estruturadas, como o Decodificador JWT, tenha em mente que um hash bcrypt não é um token que você decodifica para ler uma carga útil; é um resumo unidirecional sem nada para revelar.

Onde o gerador bcrypt se encaixa em um fluxo de trabalho real

Por si só um hash é apenas metade da história, então o mixer fica ao lado das outras ferramentas de credenciais que mantenho abertas Quando estou semeando um banco de dados de teste ou configurando uma conta demo, EU gero a própria senha com o gerador senha, verifique se ele limpa uma barra de força sensível com o verificador força senha, e só então passe pelo gerador bcrypt para obter o hash armazenado. Essa ordem é importante: uma senha aleatória forte por trás de um hash bcrypt de custo 12 é genuinamente difícil de quebrar, enquanto uma senha fraca por trás do mesmo hash ainda cai em um ataque de dicionário, porque o invasor só precisa adivinhar o punhado de candidatos prováveis em vez de todo o espaço de chaves. O fator custo lhe dá tempo; a entropia da senha é contra a qual esse tempo é gasto.

O modo verificar ganha seu lugar durante a depuração Quando um login falha misteriosamente na preparação, a maneira mais rápida de isolar o problema é colar o hash armazenado e a senha que você acredita estar correta e ver se eles correspondem Uma correspondência significa que o bug está a montante, em como a senha chega ao cheque; uma incompatibilidade significa que o hash armazenado foi escrito com uma senha diferente ou uma codificação mutilada Qualquer resposta salva você de adivinhar, e como a coisa toda é executada localmente, você pode fazê-lo com um hash real retirado de um banco de dados sem que esse hash nunca saia de sua máquina É o mesmo princípio do lado do cliente por trás de cada ferramenta no site, e para qualquer coisa que toque credenciais não é uma gentileza, é o requisito.

Perguntas frequentes

É seguro fazer hash de uma senha real neste gerador de bcrypt?

Sim, porque o hashing acontece inteiramente no seu navegador e nada é enviado para qualquer lugar Você pode confirmar isso na aba Rede de suas ferramentas de desenvolvedor: gerar um hash não faz nenhuma solicitação Dito isso, uma guia do navegador não é um gerenciador de senhas, então evite colar as credenciais ao vivo de uma conta de produção em qualquer página da web que você não construiu, e feche a guia quando terminar.

Por que a mesma senha produz um hash bcrypt diferente todas as vezes?

Porque o bcrypt gera um novo salt aleatório para cada hash e o mistura no resultado Este é um recurso: dois usuários que escolhem a mesma senha ainda obtêm hashes armazenados diferentes, portanto, um invasor não pode detectar senhas compartilhadas ou reutilizar uma tabela pré-computada A verificação ainda funciona porque o salt é armazenado dentro da própria string de hash.

Qual fator de custo devo usar para bcrypt?

Use o custo mais alto que seu fluxo de login pode tolerar sem um atraso irritante, que para a maioria dos servidores dos anos 2020 custa de 10 a 12. OWASP sugere que um único hash deve levar cerca de um quarto de segundo em seu hardware de produção. Porque cada etapa dobra o trabalho, meça em seu próprio servidor em vez de copiar um número e aumente o custo a cada poucos anos à medida que o hardware acelera.

Um hash bcrypt pode ser revertido de volta para a senha?

Não. O Bcrypt é uma função unidirecional, portanto não há uma maneira matemática de transformar um hash de volta na senha original O único ataque é adivinhar: um invasor tem senhas candidatas com o mesmo sal e custo e verifica uma correspondência. É por isso que o fator custo é importante, porque define o quão caro é cada palpite e por que senhas exclusivas fortes mais um custo alto tornam a adivinhação impraticável.

O bcrypt ainda está seguro em 2026 ou devo mudar para o Argon2?

O Bcrypt ainda é considerado seguro para armazenamento de senhas e continua sendo uma opção recomendada na Folha de dicas de armazenamento de senhas OWASP. O Argon2id, vencedor do Password Hashing Competition de 2015, é preferido para novos sistemas onde você controla o tempo de execução porque também resiste a ataques de GPU e hardware especializado. O Bcrypt é uma escolha sólida, especialmente quando sua estrutura o envia como padrão; o verdadeiro erro é usar um hash rápido de uso geral em vez de qualquer função de hash de senha.

Qual é o limite de 72 bytes no bcrypt?

O Bcrypt lê apenas os primeiros 72 bytes da senha codificada UTF-8, portanto, quaisquer caracteres além disso são ignorados Para senhas normais isso nunca importa, mas uma senha muito longa pode ser truncada, e é por isso que alguns sistemas pré-fazem a senha com SHA-256 antes do bcrypt. Esta ferramenta avisa sempre que sua entrada exceder 72 bytes, para que o truncamento nunca seja uma surpresa.

O que significam os prefixos $2a$, $2b$ e $2y$?

São tags de versão para o formato de saída bcrypt $2a$ era o original, $2y$ era uma correção específica do PHP para um bug de extensão de sinal e $2b$ é a versão atual corrigida do OpenBSD. Para novos hashes $2b$ está correto, que é o que esta ferramenta produz Todos os três verificam de forma idêntica para senhas ASCII; as diferenças só aparecem com certos bytes não ASCII no limite de 72 bytes.

O bcrypt é igual à criptografia?

Não. A criptografia é reversível com uma chave, então os dados criptografados podem ser descriptografados de volta para o original O hashing Bcrypt é unidirecional e deliberadamente lento, e destina-se apenas à verificação: você nunca precisa recuperar a senha, apenas para confirmar que alguém digitou a senha certa. Armazenar senhas com criptografia em vez de hash é um anti-padrão, porque quem detém a chave pode recuperar todas as senhas.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!