Bcrypt para JavaScript (Node.js): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations