A maioria dos sites que acessamos requer algum tipo de autenticação através de usuário e senha para nos proporcionar uma experiência personalizada e mais segura.

No entanto, precisamos ter muito cuidado da hora de armazenar as senhas dos usuários em nossos sistemas, por isso, neste artigo vamos discutir um pouco sobre isso.

Como podemos armazenar as senhas dos usuários?

Em um primeiro momento, você pode pensar que podemos simplesmente salvar a senha de um usuário como ela é digitada em um banco de dados.

Essa sem dúvida é uma abordagem simples, mas também é uma abordagem muito perigosa.

Uma das principais preocupações de sites que armazenam dados de usuários é manter a segurança desses dados, já que ataques estão cada vez mais frequentes.

Em vazamentos recentes de dados, informações como nomes, endereços e números de cartão de crédito acabaram sendo acessados e indevidamente divulgados.

Uma das formas de diminuir os efeitos de acessos indevidos aos banco de dados, é armazenar os dados de maneira que não possam ser obtidos facilmente .

Sendo assim, caso alguma pessoa mal intencionada consiga acesso ao banco de dados do seu sistema, não conseguirá ler com facilidade as informações armazenadas nele.

A principal técnica utilizada para isso é a criptografia da senha, ou seja, ao invés de armazenar a senha digitada pelo usuário, se armazena uma versão codificada dela, a partir da qual não podemos recuperar a senha atual facilmente.

Como criptografar a senha

Existem diversas maneiras de fazer a criptografia, mas a que abordaremos neste artigo é o uso do pacote bcrypt.

Podemos usar as funções deste pacote para fazer a criptografia de forma síncrona ou assíncrona e para manter a simplicidade, neste artigo usaremos a forma síncrona.

Primeiramente, para criptografar a senha precisamos gerar um “sal”. Esse “sal” nada mais é do que um dado aleatório que é usado no processo de criptografia da senha.

Depois disso, basta chamar a função de criptografia (no caso, hashSync) e informar o sal como no código abaixo:

const bcrypt = require("bcrypt");

const senha1 = "1234567";

const salt = bcrypt.genSaltSync(1);//Geração de um "sal" com custo de processamento 1
const senhaCriptografada = bcrypt.hashSync(senha1,salt);

console.log(senhaCriptografada)

Você verá que o resultado impresso, mesmo para uma senha simples como essa, é uma string complexa que provê mais segurança.

Como saber se o usuário digitou a senha correta

Bom, agora que você já sabe como criptografar uma senha para armazená-la no seu banco de dados, como saber se o usuário digitou a senha correta? Uma vez que não conseguimos retornar à senha original à partir da versão criptografada da senha.

O que fazemos então, é utilizar a função compareSync para comparar uma senha digitada com a senha que criptografamos como no exemplo a seguir:

const bcrypt = require("bcrypt");

const senha1 = "1234567";
const senhaDigitada = "1234567";

const salt = bcrypt.genSaltSync(1);
const senhaCriptografada = bcrypt.hashSync(senha1, salt);

const saoIguais = bcrypt.compareSync(senhaDigitada, senhaCriptografada);

console.log(saoIguais);

Se alterarmos a variável senhaDigitada, veremos que o resultado impresso na tela será negativo uma vez que as senhas sejam diferentes.

Veja também