Ciência e Tecnologia

Como fazer hash e verificar uma senha no Node.js com bcrypt

.

Uma das melhores maneiras de armazenar senhas com segurança é salgá-las e hash. Salting e hash convertem uma senha simples em um valor exclusivo que é difícil de reverter. A biblioteca Bcrypt permite hash e senhas salgadas em Node.js com muito pouco esforço.


O que é hashing de senha?

Hash de senha significa passar uma senha de texto simples por meio de um algoritmo de hash para gerar um valor exclusivo. Esse valor exclusivo é chamado de hash. Alguns exemplos de algoritmos de hash são bcrypt, scrypt e SHA.

MAKEUSEDO VÍDEO DO DIAROLE PARA CONTINUAR COM O CONTEÚDO

Uma das principais propriedades de um bom algoritmo de hash é que ele gera a mesma saída para a mesma entrada. Essa previsibilidade torna os hashes vulneráveis ​​a ataques de força bruta. Um hacker pode pré-computar valores de hash para muitas entradas comumente usadas e, em seguida, compará-los com os valores de hash nos valores de destino. Você pode atenuar essa vulnerabilidade usando salting.

O que é Salting de Senha?

O salting de senha adiciona uma string aleatória (o salt) a uma senha antes de criá-la. Dessa forma, o hash gerado sempre será diferente a cada vez. Mesmo que um hacker obtenha a senha com hash, levará um tempo considerável para descobrir a senha original que a gerou.

Como usar Bcrypt para hash e verificar uma senha

bcrypt é um módulo npm que simplifica a maneira como você faz o hash de senhas no Node.js. Para utilizá-lo, siga os passos abaixo:

Passo 1: Instale o Bcrypt

Instale o bcrypt executando os seguintes comandos de terminal.

Usando npm:

 npm install bcrypt

Usando fios:

 yarn add bcrypt

Passo 2: Importar Bcrypt

Na parte superior do seu arquivo JavaScript, import Bcrypt.

 const bcrypt = require("bcrypt")

Etapa 3: gerar um sal

Ligar para bcrypt.genSalt() método para gerar um sal. Este método aceita um valor inteiro que é o fator de custo que determina o tempo gasto para hash de uma senha. Quanto maior o fator de custo, mais tempo o algoritmo leva e mais difícil é reverter a senha criptografada usando força bruta.

Um bom valor deve ser alto o suficiente para proteger a senha, mas também baixo o suficiente para não retardar o processo. Geralmente varia entre 5 e 15. Neste tutorial, usaremos 10.

 bcrypt.genSalt(10, (err, salt) => {
    
})

Etapa 4: hash da senha

No bcrypt.genSalt função, passe a senha simples e o sal gerado para o bcrypt.hash() método para hash a senha.

 bcrypt.genSalt(10, (err, salt) => {
    bcrypt.hash(plaintextPassword, salt, function(err, hash) {
        
    });
})

Depois de gerar o hash, armazene-o no banco de dados. Você o usará para verificar uma senha e autenticar um usuário tentando fazer login.

Em vez de gerar o sal e o hash separadamente, você também pode gerar automaticamente o sal e o hash usando uma única função.

 bcrypt.hash(plaintextPassword, 10, function(err, hash) {
    
});

Etapa 5: comparar senhas usando bcrypt

Para autenticar usuários, você precisará comparar a senha fornecida por eles com a do banco de dados usando o bcrypt.compare() função. Esta função aceita a senha de texto simples e o hash que você armazenou, juntamente com uma função de retorno de chamada. Esse retorno de chamada fornece um objeto contendo quaisquer erros ocorridos e o resultado geral da comparação. Se a senha corresponder ao hash, o resultado será verdadeiro.

 bcrypt.compare(plaintextPassword, hash, function(err, result) {
    if (result) {
        
    }
});

Usando Async/Await

Você pode criptografar senhas em Node.js com Bcrypt usando async/await da seguinte maneira.

 async function hashPassword(plaintextPassword) {
    const hash = await bcrypt.hash(plaintextPassword, 10);
    
}

async function comparePassword(plaintextPassword, hash) {
    const result = await bcrypt.compare(plaintextPassword, hash);
    return result;
}

Usando promessas

A biblioteca bcrypt também suporta o uso de promessas. Por exemplo, aqui está uma função que faz o hash da senha usando o bloco then…catch.

 function hashPassword(plaintextPassword) {
    bcrypt.hash(plaintextPassword, 10)
        .then(hash => {
            
        })
        .catch(err => {
            console.log(err)
        })
}

Da mesma forma, esta função compara uma senha simples do usuário com uma senha com hash usando promessas.

 
function comparePassword(plaintextPassword, hash) {
   bcrypt.compare(plaintextPassword, hash)
       .then(result => {
           return result
       })
       .catch(err => {
           console.log(err)
       })
}

Hashing e Salting é uma vitória fácil

Você pode usar a biblioteca Bcrypt para hash e verificar senhas no Node.js. O hashing de senhas minimiza as chances de cibercriminosos acessarem senhas simples e usá-las para acessar dados ou serviços confidenciais.

Salgar suas senhas com hash as torna ainda mais seguras. Além do hashing, sempre valide a força da senha como uma medida de segurança adicional.

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo