Gerador e Verificador de Hash Bcrypt
Crie um hash bcrypt para uma senha, ou teste se uma senha corresponde a um hash armazenado, sem que nada saia do seu navegador.
Gerar e verificar hashes bcrypt online
O bcrypt é um algoritmo de hash de senhas feito para ser lento de propósito. Um hash de uso geral como o SHA-256 pode ser calculado bilhões de vezes por segundo, que é exatamente o que quer quem tenta adivinhar senhas de um banco de dados vazado; o bcrypt torna cada tentativa cara, e o fator de custo permite que esse preço cresça à medida que o hardware fica mais rápido. Ele é o padrão no PHP, Laravel, Ruby on Rails, Spring Security e muitos outros frameworks.
Esta página abre a aba bcrypt do Gerador de Hash. Usos típicos: criar a primeira conta de administrador direto no banco de dados, escrever um fixture de teste ou descobrir por que um usuário não consegue fazer login.
Lendo um hash bcrypt
Um hash bcrypt sempre tem 60 caracteres e carrega tudo o que é preciso para conferi-lo depois. Veja $2y$10$N9qo8uLOickgx2ZMRZoMye...:
| Parte | Significado |
|---|---|
$2y$ | Prefixo de versão |
10 | Custo: 2 elevado a 10, ou seja, 1.024 rodadas de preparação da chave |
| Os 22 caracteres seguintes | O salt aleatório |
| Os últimos 31 caracteres | O hash propriamente dito |
Escolhendo o custo
Aqui o custo pode ir de 4 a 14. Cada ponto dobra o trabalho, então custo 12 é quatro vezes mais lento que custo 10. Mire em um tempo de hash de uma fração de segundo no seu próprio servidor; a ferramenta mostra o progresso enquanto trabalha, o que dá uma noção da diferença. Como o custo fica gravado no hash, você pode aumentá-lo depois e refazer o hash de cada senha no próximo login do dono.
O limite de 72 bytes
O bcrypt só lê os primeiros 72 bytes de uma senha. Uma entrada mais longa não é rejeitada, é cortada sem aviso, então duas senhas longas que compartilham os primeiros 72 bytes geram o mesmo hash. Caracteres fora do inglês, como letras acentuadas e o ç, costumam ocupar de dois a quatro bytes cada em UTF-8, então o limite chega antes do que a contagem de caracteres sugere. A ferramenta conta os bytes enquanto você digita e avisa assim que passar de 72.
Conferindo um hash no código
| Linguagem | Criar | Verificar |
|---|---|---|
| PHP | password_hash($pw, PASSWORD_BCRYPT) | password_verify($pw, $hash) |
| Node.js (bcryptjs) | bcrypt.hash(pw, 10) | bcrypt.compare(pw, hash) |
| Python (bcrypt) | bcrypt.hashpw(pw, bcrypt.gensalt()) | bcrypt.checkpw(pw, hashed) |
Para senhas aleatórias a transformar em hash, use o gerador de senhas. Para checksums de arquivos em vez de senhas, fique com o SHA-256.