DEV Community

Cover image for Aplicações de Segurança no Desenvolvimento de um Software: Hash e Salt #1
Arthur Cunha
Arthur Cunha

Posted on

Aplicações de Segurança no Desenvolvimento de um Software: Hash e Salt #1

Estou desenvolvendo um ERP completo para a área de Odontologia, onde posso aprimorar meus conhecimentos e colocá-los em um projeto profissional real. Durante este período, estou utilizando o NestJs para criar os primeiros endpoints, incluindo um para login. Aprendi mais sobre como armazenar senhas em banco de dados e protegê-las usando Hash e Salt.

O Salt e sua funcionalidade:

O salt é a adição de caracteres, palavras, termos ou mesmo números que introduzem certa aleatoriedade nos algoritmos e tornam-nos mais difíceis de decifrar. Geralmente, são adicionados antes da criptografia e podem ser fixos ou aleatórios. Um exemplo seria o seguinte:

Senha Hash Hash + Salt
123456 213465 213465654321A!&**
senha123 1a2b3c 1a2b3cxyz987$%
segredo456 987zyx 987zyx!&*abc123
minhasenha senha123 senha123ABCD!@#

criação de um salt e a implementação de uma função hash levam muito mais em consideração, mas o objetivo é aumentar a complexidade, especialmente porque bancos de dados de hashes de senhas comuns são amplamente conhecidos e isso compromete a segurança de aplicativos.

Como está sendo aplicado na prática?

Estou utilizando a biblioteca bcrypt no NestJs que tem a função de criar todos os hashs e salts já em funções proprias, o que facilita não só o trabalho de não precisar fazer manualmente, como também garante que a mesma siga todos os padrões de segurança.

Para instalar a lib e utilizar no nestJs:

$ npm i bcrypt
$ npm i -D @types/bcrypt
Enter fullscreen mode Exit fullscreen mode

Seguindo o exemplo da documentação você pode usar a função hash da seguinte forma:

import * as bcrypt from 'bcrypt';
const saltOrRounds = 10;
const password = 'random_password';
const salt = bcrypt.genSaltSync(saltRounds)
const hash = bcrypt.hashSync(password, salt)
Enter fullscreen mode Exit fullscreen mode

Onde saltOrRounds define o valor de caracteres
password é a senha a ser criptografada
com isso passamos saltRound como parâmetros da função genSaltSync que é responsável pela criação do salt, a pós isso
passamos na função hashtSynca senha e o salt criado.

Dando console.log(hash) já vamos ter a combinação que foi criada.

Referências

A documentação da lib se encontra em: https://www.npmjs.com/package/bcrypt para mais funcionalidades.


Feito com ❤️ por Arthur

Veja meus projetos no Github e conecte-se no LinkedIn.

Top comments (0)