Bcrypt para JavaScript (Node.js): guia completo
1. O que é e para que serve
Bcrypt é uma função hash criptográfica adaptativa, projetada especificamente para armazenar senhas de forma segura. Diferente de funções hash comuns (MD5, SHA-1, SHA-256), que são criadas para serem rápidas, o Bcrypt é intencionalmente lento e consome muitos recursos. Isso torna ataques de força bruta (brute-force) e tabelas rainbow praticamente inviáveis. A biblioteca bcrypt para Node.js oferece uma interface simples e confiável para hashing e verificação de senhas.
Por que usar Bcrypt? Ao cadastrar um usuário em um site, a senha nunca deve ser armazenada em texto puro. Se o banco de dados for comprometido, o invasor terá acesso a todas as senhas. O Bcrypt resolve esse problema: você faz o hash da senha com um "sal" (salt) único e armazena apenas o hash. No login, você faz o hash da senha digitada novamente e compara com o hash salvo. O Bcrypt gera e incorpora o sal automaticamente no resultado, então você não precisa armazená-lo separadamente.
A principal característica do Bcrypt é a capacidade de ajustar o "fator de custo" (cost factor). Quanto maior o valor de cost, mais tempo leva para calcular o hash. Com o aumento do poder computacional, basta aumentar o cost, e os hashes antigos continuam válidos (a verificação usa o cost salvo no hash). Isso torna o Bcrypt resistente ao avanço futuro do hardware.
2. Instalação
Para instalar a biblioteca Bcrypt em um projeto Node.js, execute o seguinte comando no terminal (na pasta raiz do projeto):
npm install bcrypt
Após a instalação, você pode importar a biblioteca no seu código:
const bcrypt = require('bcrypt');
Se você estiver usando ES Modules (type: "module" no package.json), a importação será assim:
import bcrypt from 'bcrypt';
3. Início rápido — exemplo funcional mínimo
Neste exemplo, vamos gerar o hash de uma senha e depois verificá-la. Essa é a base para qualquer sistema de autenticação.
const bcrypt = require('bcrypt');
const plainPassword = 'minhaSenhaSuperSecreta123!';
const saltRounds = 10;
// Gerando o hash da senha
bcrypt.hash(plainPassword, saltRounds, function(err, hash) {
if (err) {
console.error('Erro ao gerar hash:', err);
return;
}
console.log('Hash da senha:', hash);
// Verificando a senha
bcrypt.compare(plainPassword, hash, function(err, result) {
if (err) {
console.error('Erro ao comparar:', err);
return;
}
console.log('Senha coincide:', result); // true
});
});
Este código faz duas coisas: cria um hash da senha e depois verifica se a senha original corresponde a esse hash. Observe que saltRounds define a complexidade do cálculo (valor recomendado: 10–12).
4. Métodos/funções/classes principais
4.1. bcrypt.hash(data, saltOrRounds, callback)
Assinatura: bcrypt.hash(data: string | Buffer, saltOrRounds: number | string, callback: (err: Error | null, encrypted: string) => void): void
O que faz: Gera o hash de forma assíncrona de uma string ou Buffer. saltOrRounds pode ser um número (quantidade de rodadas) ou um sal já pronto (string). Retorna o hash através do callback.
Exemplo:
bcrypt.hash('senha123', 12, (err, hash) => {
if (err) throw err;
console.log(hash); // $2b$12$...
});
4.2. bcrypt.hashSync(data, saltOrRounds)
Assinatura: bcrypt.hashSync(data: string | Buffer, saltOrRounds: number | string): string
O que faz: Versão síncrona do Também na biblioteca
Configuração de aplicações C++: bibliotecas e abordagens
Testes em Rust: frameworks e ferramentas
Trabalhando com S3 e armazenamentos em nuvem em Swift (iOS/macOS): biblioteca AWSS3
Monitoramento de aplicações C++: biblioteca metrics para coleta de métricas
Cliente HTTP para C++: as melhores bibliotecas para trabalhar com rede
Recommendations