.

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.
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.
.








